i have a Class that can be accessed on multiple thread.
To make sure i don't have simultaneous access i will use a CCriticalSection
I was wondering if i can just create a CCriticalSectionfor any copy of the object (i think i can have about 100-1000 this object in the program) or it will be best to create a static member CCriticalSection and use this for all the object?
Surely there is a limit, but 1000 is perfectly fine. But in your case I believe static member is better.
Creating extra objects is the last thing you should do from the performance prospective.
Windows has no limit on the number of sections you can create other than available memory (due to internal debug linkages, its consumes more than
sizeof(CCriticalSection)
orsizeof(CriticalSection)
.Prior to XP/Server 2003 you could run out of kernel objects for
CRITICAL_SECTION
s (specifically the event used to arbitrate when there was contention on theCRITICAL_SECTION
). For XP and beyond you're bounded as you are for many things, by your virtual address space.If your scope was only to "signal" why not use InterlockedExchange and Interlock... family functions?