linux線程同步和進程同步的區別?
線程同步:多線程編程中,解決***享資源沖突的問題進程同步:多進程編程中,解決***享資源沖突的問題但是部分同學對線程同步和進程同步研究得不夠深入,比如互斥鎖和條件變量能不能同時用於線程同步和進程同步,本質上有什麽區別。首先我們知道,linux下每個進程都有自己的獨立進程空間,假設A進程和B進程各有壹個互斥鎖,這個鎖放在進程的全局靜態區,那麽AB進程都是無法感知對方的互斥鎖的。
互斥鎖和條件變量出自Posix.1線程標準,它們總是可以用來同步壹個進程內的各個線程的。
如果壹個互斥鎖或者條件變量存放在多個進程***享的某個內存區中,那麽Posix還允許它用在這些進程間的同步。看到這裏,是不是發現點了什麽,線程同步和進程同步的本質區別在於鎖放在哪,放在私有的進程空間還是放在多進程***享的空間,並且看鎖是否具備進程***享的屬性,
linux信號量線程進程區別?
信號量在進程是以有名信號量進行通信的,在線程是以無名信號進行通信的,因為線程linux還沒有實現進程間的通信,所以在sem_init的第二個參數要為0,而且在多線程間的同步是可以通過有名信號量也可通過無名信號,但是壹般情況線程的同步是無名信號量,無名信號量使用簡單,而且sem_t存儲在進程空間中,有名信號量必須LINUX內核管理,由內核結構structipc_ids存儲,是隨內核持續的,系統關閉,信號量則刪除,當然也可以顯示刪除,通過系統調用刪除,
消息隊列,信號量,內存***享,這幾個都是壹樣的原理。,只不過信號量分為有名與無名