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