Re: New to CSingleLock
Pat wrote:
Hi all,
I'm having trouble making sense of the documentation for CCriticalSection
and CSingleLock.
Things I don't understand:
1) Do I need a CSingleLock, or is CCriticalSection enough by itself?
2) Why do both classes have Lock() and Unlock() methods?
3) (Assuming I need CSingleLock...) Do I need to call
CSingleLock::Lock() explicitly, or does just creating the CSingleLock
object perform the lock?
4) Do I need to call CSingleLock::IsLocked() before entering the
"critical" code sections, or will just acquiring the lock cause the
necessary wait to happen?
5) What happens if an exception is thrown in a "locked" section?
Just in case it matters, here is the basic structure of my application:
It's a single MFC app (single process) with multiple threads. There is a
single, global object that is used by all the threads to share large
amounts of data. All its methods, like Read(), Write(), etc, are
completely "thread-unsafe" right now, because the data is stored in a
complicated way.
Thanks in advance for clarification.
Pat
For interthread synchronization within one process CCriticalSection is
enough by itself. Look at its code: Each function is a one-line inline
function call to the underlying critical section API.
For anything more advanced I recommend you ignore CSingleLock and go
directly to the Win32 API that it (obscurely) wraps. The
WaitForSingleObject and WaitForMultipleObjects APIs are much more
flexible, and have a better reputation, than the MFC wrapper. And most
folks find the API level easier to understand, as well :)
--
Scott McPhillips [VC++ MVP]