求检查指导 自己封装的一个锁
其实我对互斥到底是个什么东西,并不清楚,但是知道临界区间这个东西
所以自己查资料封装了一个简单的临界区间,求各位大神,指导下,看看,有没有什么问题
可以的话,有谁能用来调试下么,我都不知道怎么写调试代码,不知道怎么去创建线程什么的
- C/C++ code
#ifndef _THREAD_CRITICAL_H_E_H_INCLUDE_______________#define _THREAD_CRITICAL_H_E_H_INCLUDE_______________#ifdef WIN32 #include <windows.h> #define ThreadLock CRITICAL_SECTION #define CreateThreadLock(lock) InitializeCriticalSection(&lock) #define DeleteThreadLock(lock) DeleteCriticalSection(&lock) #define Lock(lock) EnterCriticalSection(&lock) #define Unlock(lock) LeaveCriticalSection(&lock)#else #include <pthread.h> #include <assert.h> #define ThreadLock pthread_mutex_t #define CreateThreadLock(lock) assert(pthread_mutex_init(&lock, NULL) == 0) #define DeleteThreadLock(lock) assert(pthread_mutex_destroy(&lock) == 0) #define Lock(lock) assert(pthread_mutex_lock(&lock) == 0) #define Unlock(lock) assert(pthread_mutex_unlock(&lock) == 0)#endifclass ThreadCritical{private: ThreadLock m_Lock;public: ThreadCritical(){ CreateThreadLock(m_Lock);} ~ThreadCritical(){ DeleteThreadLock(m_Lock);}public: SetLock(){ Lock(m_Lock); } MovLock(){ UNLock(m_Lock);}};#endif
[解决办法]
ThreadCritical lock;
...
lock.SetLock();
...
lock.MovLock();
[解决办法]
加m_Stata导致错误。 根本锁不住。
[解决办法]
m_Stata不是线程安全的。
[解决办法]
不加变量可以参照CComAutoCriticalSection/CComCriticalSection的实现,要加变量参照CComCritSecLock这个模板类的实现,都可以直接看源码的。