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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM