为什么很多人都用CRITICAL_SECTION实现锁
如题。CRITICAL_SECTION只能用于不同线程的互斥,而不能用于同步。因为同一个线程可以多次EnterCriticalSection。。 为什么网上的代码,很多“锁”、“自动锁”的类,都是用CRITICAL_SECTION实现。 如果使用的人不熟悉这个,很容易就会用错呀。
[解决办法]
CRITICAL_SECTION本来就是用来
在多线程的情况下
保证一段代码一次只会被一个线程执行
同一个线程的多次EnterCriticalSection,必然是先后执行的,会有什么问题?
[解决办法]
我是在做windows嵌入式系统的驱动时,看到windows系统内核源码在做对象同步的时候通常都用的CRITICAL_SECTION,而且内核源码中还简单的封装好一个class,后来我就干脆把它保存起来,用于自己的项目中。
[解决办法]
#ifdef _WIN32
EnterCriticalSection(&m_lock);
#else
pthread_mutex_lock(&m_lock);
#endif
#ifdef _WIN32
#define XXX_LOCK(x) EnterCriticalSection(&x);
#else
#define XXX_LOCK(x) pthread_mutex_lock(&x);
#endif