看了很多多線程與隊(duì)列的概念荸哟,感覺對(duì)于一般開發(fā)者來(lái)說(shuō)不是很容易理解,舉兩個(gè)網(wǎng)上比較好的栗子芒帕,如果理解了相信對(duì)于多線程歉嗓、隊(duì)列的概念也就了解了。
案例一:
分析:
首先執(zhí)行任務(wù)1背蟆,這是肯定沒問(wèn)題的鉴分,只是接下來(lái),程序遇到了同步線程带膀,那么它會(huì)進(jìn)入等待志珍,等待任務(wù)2執(zhí)行完,然后執(zhí)行任務(wù)3垛叨。但這是隊(duì)列碴裙,有任務(wù)來(lái),當(dāng)然會(huì)將任務(wù)加到隊(duì)尾点额,然后遵循FIFO原則執(zhí)行任務(wù)舔株。那么,現(xiàn)在任務(wù)2就會(huì)被加到最后还棱,任務(wù)3排在了任務(wù)2前面载慈,問(wèn)題來(lái)了:
任務(wù)3要等任務(wù)2執(zhí)行完才能執(zhí)行,任務(wù)2又排在任務(wù)3后面珍手,意味著任務(wù)2要在任務(wù)3執(zhí)行完才能執(zhí)行办铡,所以他們進(jìn)入了互相等待的局面辞做。【既然這樣寡具,那干脆就卡在這里吧】這就是死鎖秤茅。
案例二:
分析:
首先執(zhí)行任務(wù)1,接下來(lái)會(huì)遇到一個(gè)同步線程童叠,程序會(huì)進(jìn)入等待框喳。等待任務(wù)2執(zhí)行完成以后,才能繼續(xù)執(zhí)行任務(wù)3厦坛。從dispatch_get_global_queue可以看出五垮,任務(wù)2被加入到了全局的并行隊(duì)列中,當(dāng)并行隊(duì)列執(zhí)行完任務(wù)2以后杜秸,返回到主隊(duì)列放仗,繼續(xù)執(zhí)行任務(wù)3。