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

posted @ 2020-08-13 13:23  KwinWei  阅读(1682)  评论(0编辑  收藏  举报