新聞中心
Go語言中mutex如何使用,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
10年積累的成都做網(wǎng)站、成都網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站策劃后付款的網(wǎng)站建設(shè)流程,更有瓊中黎族免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
1. 基本概念
臨界區(qū)(Critical Section): 當(dāng)程序并發(fā)地運(yùn)行時(shí),多個(gè)Go協(xié)程不應(yīng)該同時(shí)訪問那些修改共享資源的代碼,這些修改共享資源的代碼稱為臨界區(qū)。
競(jìng)態(tài)條件:它旨在描述一個(gè)系統(tǒng)或者進(jìn)程的輸出依賴于不受控制的事件出現(xiàn)順序或者出現(xiàn)時(shí)機(jī)。舉例來說,如果計(jì)算機(jī)中的兩個(gè)進(jìn)程同時(shí)試圖修改一個(gè)共享內(nèi)存的內(nèi)容,在沒有并發(fā)控制的情況下,最后的結(jié)果依賴于兩個(gè)進(jìn)程的執(zhí)行順序與時(shí)機(jī)。而且如果發(fā)生了并發(fā)訪問沖突,則最后的結(jié)果是不正確的。
鎖:是在執(zhí)行并發(fā)時(shí)用于強(qiáng)行限制資源訪問的同步機(jī)制,即用于在并發(fā)控制中保證對(duì)互斥要求的滿足。一般的鎖是建議鎖(advisory lock),每個(gè)線程在訪問對(duì)應(yīng)資源前都需獲取鎖的信息,再根據(jù)信息決定是否可以訪問。若訪問對(duì)應(yīng)信息,鎖的狀態(tài)會(huì)改變?yōu)殒i定,因此其他線程此時(shí)不會(huì)訪問該資源,當(dāng)資源結(jié)束后,會(huì)恢復(fù)鎖的狀態(tài),允許其他線程的訪問。
2.mutex介紹
在了解了上面的基本概念之后,我們來看下Go語言中的mutex。
mutex 用于提供一種加鎖機(jī)制,可確保在某時(shí)刻只有一個(gè)協(xié)程在臨界區(qū)運(yùn)行,以防止出現(xiàn)競(jìng)態(tài)條件。
mutexs是Go的sync包中的一個(gè)數(shù)據(jù)結(jié)構(gòu),定義了兩個(gè)方法:Lock 和 Unlock。所有在 Lock 和 Unlock 之間的代碼,都只能由一個(gè) Go 協(xié)程執(zhí)行,于是就可以避免競(jìng)態(tài)條件。
1) 不用mutex的例子:
output:
結(jié)果分析:我們執(zhí)行了5次程序,發(fā)現(xiàn)輸出的結(jié)果并不一致。原因就是 這100個(gè)協(xié)程,產(chǎn)生了競(jìng)態(tài)關(guān)系,導(dǎo)致計(jì)算的結(jié)果,并不是100, 而是變成了不確定的值。
2)使用mutex的例子:(我們通過mutex的鎖機(jī)制來解決這個(gè)問題)
Output:
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。
名稱欄目:Go語言中mutex如何使用
網(wǎng)站路徑:http://www.dlmjj.cn/article/ppdosj.html