我有一个可以在多个线程上访问的类。
为了确保我没有同时访问权限,我将使用CCriticalSection
我想知道我是否可以为对象的任何副本创建一个CCriticalSection(我想我可以在程序中拥有大约100-1000个这个对象),或者最好创建一个静态成员CCriticalSection并将其用于所有对象?
答案 0 :(得分:1)
在XP / Server 2003之前,您可能会耗尽CRITICAL_SECTION
的内核对象(特别是当CRITICAL_SECTION
存在争用时用于仲裁的事件)。对于XP及更高版本,你可以通过虚拟地址空间对许多事物进行限制。
答案 1 :(得分:0)
当然有一个限制,但1000完全没问题。 但在你的情况下,我相信静态成员更好。
创建额外的对象是你应该从性能预期中做的最后一件事。
答案 2 :(得分:0)
Windows对可用内存以外的部分数量没有限制(由于内部调试链接,其消耗量超过sizeof(CCriticalSection)
或sizeof(CriticalSection)
。
答案 3 :(得分:0)
如果您的范围只是“发出信号”,为什么不使用InterlockedExchange和Interlock ...系列函数?