读书人

求检查指导 自己封装的一个锁,该如何解

发布时间: 2014-05-31 16:45:13 作者: rapoo

求检查指导 自己封装的一个锁
其实我对互斥到底是个什么东西,并不清楚,但是知道临界区间这个东西

所以自己查资料封装了一个简单的临界区间,求各位大神,指导下,看看,有没有什么问题

可以的话,有谁能用来调试下么,我都不知道怎么写调试代码,不知道怎么去创建线程什么的

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这个模板类的实现,都可以直接看源码的。

读书人网 >VC/MFC

热点推荐