Linux 互斥鎖的實現原理(pthread_mutex_t)


本文參考——http://www.bitscn.com/os/linux/201608/725217.html

http://blog.csdn.net/jianchaolv/article/details/7544316

引言

互斥鎖大都會使用,但是要了解其原理就要花費一番功夫了。盡管我們說互斥鎖是用來保護一個臨界區,實際上保護的是臨界區中被操縱的數據。

互斥鎖還是分為三類:快速互斥鎖/遞歸互斥鎖/檢測互斥鎖

futex

要想了解互斥鎖的內部實現,先來了解一下futex(fast Userspace mutexes)的作用。

內核態和用戶態的混合機制。

還沒有futex的時候,內核是如何維護同步與互斥的呢?系統內核維護一個對象,這個對象對所有進程可見,這個對象是用來管理互斥鎖並且通知阻塞的進程。如果進程A要進入臨界區,先去內核查看這個對象,有沒有別的進程在占用這個臨界區,出臨界區的時候,也去內核查看這個對象,有沒有別的進程在等待進入臨界區。

互斥鎖

1、互斥鎖的結構?

在futex的基礎上用的內存共享變量來實現的。

2、不能鎖住的時候,是如何進入休眠,又如何等待被喚醒的呢?

進入鎖的時候就會區檢查那個共享變量,如果不能獲取鎖,就會通過futex系統調用進入休眠。如果有人釋放鎖,就會通過futex來喚醒。

3、互斥鎖的屬性?

指定鎖的適用范圍。

4、經典案例——生產者消費者


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM