關(guān)于線程的問題:死鎖、GCD、 多線程

關(guān)于死鎖,學過操作系統(tǒng)的同學們都知道,就是不能繼續(xù)執(zhí)行,卡(qia)住在當前狀態(tài)值。在代碼中表現(xiàn)的就是:crash,崩潰,在軟件上就是閃退、卡住了。那么,死鎖是怎么造成的又應該怎么避免呢?接下來就是見證奇跡的時刻!!

死鎖

1、直接在主隊列中提交同步任務(wù)。
2、在主隊列的異步任務(wù)執(zhí)行任務(wù)中提交同步任務(wù)到主隊列。
3、謹慎使用dispath_sync函數(shù)。
如圖所示:
死鎖狀態(tài):

使用:dispath_sync函數(shù)

死鎖

輸出結(jié)果

使用異步:dispath_async函數(shù)

正常

輸出結(jié)果

GCD

使用GCD主要是應用于多線程的使用,比如:網(wǎng)絡(luò)請求數(shù)據(jù),而UI的界面加載和刷新則需要在主線程里面進行。此處啰嗦一點:在使用MBProgress這個提示框時候,就需要在主線程中使用。
如圖:(借用別人的圖,之后有詳細的講解鏈接奉上)


GCD使用

輸出結(jié)果

這段代碼也實現(xiàn)了1234正常的順序,登錄--付款--下載--更新UI的功能,首先說明一下打印結(jié)果當中共出現(xiàn)了三個線程,但是注意每一次點擊事件我們只用到兩個線程,一個是主線程(系統(tǒng)自動創(chuàng)建,)一個是71行我們自己創(chuàng)建的子線程,至于打印結(jié)果出現(xiàn)了number = 3這個線程的問題是因為GCD透明優(yōu)化和系統(tǒng)的原因,我們不用管理這些問題.只要清楚每次點擊事件只有兩個線程,兩個隊列(主隊列和global)就可以了。

圖二:
GCD使用

輸出結(jié)果
隊列
隊列問題可以查看以下鏈接內(nèi)容

鏈接:http://www.cnblogs.com/LDSmallCat/p/4910080.html
鏈接:http://www.cnblogs.com/LDSmallCat/p/4910158.html
此處的問題相信讀者可以看明白。如若有錯誤請噴并指正!!

附上鏈接:

GCD:https://github.com/Vickeywei/GCD

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容