我可以创建多少关键部分有任何限制?

时间:2011-01-19 13:22:22

标签: multithreading visual-c++ mfc

我有一个可以在多个线程上访问的类。

为了确保我没有同时访问权限,我将使用CCriticalSection

我想知道我是否可以为对象的任何副本创建一个CCriticalSection(我想我可以在程序中拥有大约100-1000个这个对象),或者最好创建一个静态成员CCriticalSection并将其用于所有对象?

4 个答案:

答案 0 :(得分:1)

在XP / Server 2003之前,您可能会耗尽CRITICAL_SECTION的内核对象(特别是当CRITICAL_SECTION存在争用时用于仲裁的事件)。对于XP及更高版本,你可以通过虚拟地址空间对许多事物进行限制。

答案 1 :(得分:0)

当然有一个限制,但1000完全没问题。 但在你的情况下,我相信静态成员更好。

创建额外的对象是你应该从性能预期中做的最后一件事。

答案 2 :(得分:0)

Windows对可用内存以外的部分数量没有限制(由于内部调试链接,其消耗量超过sizeof(CCriticalSection)sizeof(CriticalSection)

答案 3 :(得分:0)

如果您的范围只是“发出信号”,为什么不使用InterlockedExchange和Interlock ...系列函数?