Существует ли ограничение на количество критических разделов, которые я могу создать? - PullRequest
1 голос
/ 19 января 2011

У меня есть класс, к которому можно получить доступ в нескольких потоках.

Чтобы убедиться, что у меня нет одновременного доступа, я буду использовать CCriticalSection

Мне было интересно, могу ли я просто создать CCriticalSection для любой копии объекта (я думаю, что у меня может быть около 100-1000 этого объекта в программе), или будет лучше создать статический член CCriticalSection и использовать его для всех объект?

Ответы [ 4 ]

1 голос
/ 19 января 2011

До XP / Server 2003 вы могли исчерпать объекты ядра в течение CRITICAL_SECTION с (в частности, событие, используемое для арбитража при возникновении конфликта на CRITICAL_SECTION). Для XP и выше вы ограничены, как и многие другие, вашим виртуальным адресным пространством.

0 голосов
/ 22 января 2011

Если ваша сфера была только "сигнализировать", почему бы не использовать функции семейства InterlockedExchange и Interlock ...?

0 голосов
/ 19 января 2011

Windows не имеет ограничений на количество разделов, которые вы можете создать, кроме доступной памяти (из-за внутренних отладочных связей она потребляет более sizeof(CCriticalSection) или sizeof(CriticalSection).

0 голосов
/ 19 января 2011

Конечно, есть предел, но 1000 прекрасно. Но в твоем случае я считаю, что статический член лучше.

Создание дополнительных объектов - это последнее, что вы должны сделать с точки зрения производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...