Linux進程鎖和線程鎖的本質區別


基本概念:

大部分同學都知道線程同步和進程同步的概念,

線程同步:多線程編程中,解決共享資源沖突的問題
進程同步:多進程編程中,解決共享資源沖突的問題

但是部分同學對線程同步和進程同步研究得不夠深入,比如互斥鎖和條件變量能不能同時用於線程同步和進程同步,本質上有什么區別。

首先我們知道,linux下每個進程都有自己的獨立進程空間,假設A進程和B進程各有一個互斥鎖,這個鎖放在進程的全局靜態區,那么AB進程都是無法感知對方的互斥鎖的。

互斥鎖和條件變量出自Posix.1線程標准,它們總是可以用來同步一個進程內的各個線程的。如果一個互斥鎖或者條件變量存放在多個進程共享的某個內存區中,那么Posix還允許它用在這些進程間的同步。

看到這里,是不是發現點了什么,線程同步和進程同步的本質區別在於鎖放在哪,放在私有的進程空間還是放在多進程共享的空間,並且看鎖是否具備進程共享的屬性,

 


下面列舉了常用的同步機制,使用時需要注意線程同步和進程同步初始化的參數的不同。

線程同步:
1.互斥鎖

2.讀寫鎖

3.條件變量

4.信號量

5.自旋鎖

6.屏障(barrier)


進程同步:

1.互斥鎖

2.讀寫鎖

3.條件變量

4.記錄鎖(record locking)

5.信號量

6.屏障(barrier)


補充:

https://blog.csdn.net/junwua/article/details/80576433


免責聲明!

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



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