基本概念:
大部分同學都知道線程同步和進程同步的概念,
線程同步:多線程編程中,解決共享資源沖突的問題
進程同步:多進程編程中,解決共享資源沖突的問題
但是部分同學對線程同步和進程同步研究得不夠深入,比如互斥鎖和條件變量能不能同時用於線程同步和進程同步,本質上有什么區別。
首先我們知道,linux下每個進程都有自己的獨立進程空間,假設A進程和B進程各有一個互斥鎖,這個鎖放在進程的全局靜態區,那么AB進程都是無法感知對方的互斥鎖的。
互斥鎖和條件變量出自Posix.1線程標准,它們總是可以用來同步一個進程內的各個線程的。如果一個互斥鎖或者條件變量存放在多個進程共享的某個內存區中,那么Posix還允許它用在這些進程間的同步。
看到這里,是不是發現點了什么,線程同步和進程同步的本質區別在於鎖放在哪,放在私有的進程空間還是放在多進程共享的空間,並且看鎖是否具備進程共享的屬性,
下面列舉了常用的同步機制,使用時需要注意線程同步和進程同步初始化的參數的不同。
線程同步:
1.互斥鎖
2.讀寫鎖
3.條件變量
4.信號量
5.自旋鎖
6.屏障(barrier)
進程同步:
1.互斥鎖
2.讀寫鎖
3.條件變量
4.記錄鎖(record locking)
5.信號量
6.屏障(barrier)
補充: