新聞中心
C語言多線程線程同步可以干什么?
一:互斥與同步
互斥:一個公共資源同一時刻只能被一個進(jìn)程或線程使用,多個進(jìn)程或線程不能同時使用公共資源。
同步:兩個或兩個以上的進(jìn)程或線程在運(yùn)行過程中協(xié)同步調(diào),按預(yù)定的先后次序運(yùn)行。
解決方法:互斥鎖,條件變量,讀寫鎖,自旋鎖,信號量(互斥與同步)
二:互斥鎖(同步)
互斥鎖是一種簡單的加鎖的方法來控制對共享資源的訪問,互斥鎖只有兩種狀態(tài),即上鎖( lock )和解鎖( unlock )。
特點(diǎn):唯一性,原子性,非繁忙等待
三:條件變量(同步)
條件變量是用來等待而不是用來上鎖的。條件變量用來自動阻塞一個線程,直 到某特殊情況發(fā)生為止。適合多個線程等待某個條件的發(fā)生,不使用條件變量,那么每個線程就不斷嘗試互斥鎖并檢測條件是否發(fā)生,浪費(fèi)系統(tǒng)資源。
四:讀寫鎖(同步)
三種狀態(tài):讀模式下加鎖狀態(tài)、寫模式加鎖狀態(tài)、不加鎖狀態(tài)
【讀寫鎖的特點(diǎn)】:
如果有其它線程讀數(shù)據(jù),則允許其它線程執(zhí)行讀操作,但不允許寫操作;
如果有其它線程寫數(shù)據(jù),則其它線程都不允許讀、寫操作。
【讀寫鎖的規(guī)則】:
1:如果某線程申請了讀鎖,其它線程可以再申請讀鎖,但不能申請寫鎖;
2:如果某線程申請了寫鎖,其它線程不能申請讀鎖,也不能申請寫鎖。
讀寫鎖適合于對數(shù)據(jù)結(jié)構(gòu)的讀次數(shù)比寫次數(shù)多得多的情況。
五:自旋鎖(同步)#include

c# 怎么實現(xiàn)線程同步,而不出現(xiàn)死鎖的情況,lock的具體用法?
線程同步是指,兩個或兩個以上的線程訪問同一資源時,需要線程同步你可以使用下面這個類;
Monitor.Enter(obj);
...
Monitor.Wait(obj);
中間的代碼同時只允許一個線程訪問,其他線程執(zhí)行到Monitor.Enter(obj),就會自動掛起,帶執(zhí)行的線程釋放排它鎖后就允許線程隊列的最后一個線程進(jìn)入執(zhí)行,同時獲得排他鎖。其實這和
lock(obj)
{
...
}
所起的效果一樣。
多線程的實現(xiàn)方法,同步有幾種方法?
一、java允許多線程并發(fā)控制,當(dāng)多個線程同時操作一個可共享的資源變量時(如數(shù)據(jù)的增刪改查),將會導(dǎo)致數(shù)據(jù)不準(zhǔn)確,相互之間產(chǎn)生沖突,因此加入同步鎖以避免在該線程沒有完成操作之前,被其他線程的調(diào)用, 從而保證了該變量的唯一性和準(zhǔn)確性。
二、實現(xiàn)方法:
1、同步方法即有synchronized關(guān)鍵字修飾的方法。由于java的每個對象都有一個內(nèi)置鎖,當(dāng)用此關(guān)鍵字修飾方法時,內(nèi)置鎖會保護(hù)整個方法。在調(diào)用該方法前,需要獲得內(nèi)置鎖,否則就處于阻塞狀態(tài)。代碼如: public synchronized void save(){}123注:synchronized關(guān)鍵字也可以修飾靜態(tài)方法,此時如果調(diào)用該靜態(tài)方法,將會鎖住整個類
2、同步代碼塊即有synchronized關(guān)鍵字修飾的語句塊。被該關(guān)鍵字修飾的語句塊會自動被加上內(nèi)置鎖,從而實現(xiàn)同步。
3、使用特殊域變量(volatile)實現(xiàn)線程同步
1)volatile關(guān)鍵字為域變量的訪問提供了一種免鎖機(jī)制;
到此,以上就是小編對于的問題就介紹到這了,希望這3點(diǎn)解答對大家有用。
標(biāo)題名稱:c語言windows線程同步
當(dāng)前地址:http://www.dlmjj.cn/article/djjehog.html


咨詢
建站咨詢
