Linux下怎样模拟Windows的临界区(CRITICAL_SECTION)
网上很多文章讲这个问题,但大多都仅仅是说用Linux下的mutex替代Windows下的CRITICAL_SECTION:pthread_mutex_lock、pthread_mutex_unlock。再说的多一些的,无非是用类的构造和析构函数来封装一下。
这里忽略了一个很重要的细节,Windows下的Mutex和CRITICAL_SECTION,都是递归锁,而Linux下的pthread_mutex,默认是非递归锁。区别体现在,同一个线程,递归锁可以重入而不阻塞;非递归锁则会阻塞同一个线程的第二次加锁行为(再第一次释放锁之前)。
因此,要在Linux下实现可递归的临界区,这么做:
pthread_mutexattr_t attr;
pthread_mutexattr_init(&attr);
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&mutex,&attr);
转载于:http://blog.sina.com.cn/s/blog_484102dd0102w05p.html