[Swift] A B C 3個(gè)線程 有順序的循環(huán)執(zhí)行代碼

今天朋友問(wèn)了一個(gè)問(wèn)題,就是標(biāo)題,但是我特么百度一搜 Java 啥的一大堆 ,據(jù)說(shuō)是面試題目, 我這里也就寫(xiě)了一個(gè)
金典題目:
有A,B,C三個(gè)線程, A線程輸出A, B線程輸出B, C線程輸出C,要求, 同時(shí)啟動(dòng)三個(gè)線程
 按順序輸出ABC, 無(wú)限循環(huán)
//這里采用信號(hào)量解決,GCD中 有3個(gè)函數(shù)是針對(duì)信號(hào)量(semaphore)的操作的
  dispatch_semaphore_create   創(chuàng)建一個(gè)semaphore
  dispatch_semaphore_signal   發(fā)送一個(gè)信號(hào)
  dispatch_semaphore_wait    等待信號(hào)

簡(jiǎn)單的說(shuō)一下作用,套的百度到的話語(yǔ),感覺(jué)不錯(cuò)

簡(jiǎn)單的介紹一下這三個(gè)函數(shù),第一個(gè)函數(shù)有一個(gè)整形的參數(shù),我們
可以理解為信號(hào)的總量,
dispatch_semaphore_signal    是發(fā)送一個(gè)信號(hào),自然會(huì)讓信號(hào)總量加1

dispatch_semaphore_wait      等待信號(hào),當(dāng)信號(hào)總量少于0的時(shí)候就會(huì)一直等待,否則就可以正常的
執(zhí)行,并讓信號(hào)總量-1,根據(jù)這樣的原理,我們便可以快速的創(chuàng)建
一個(gè)并發(fā)控制來(lái)同步任務(wù)和有限資源訪問(wèn)控制

好了 廢話不多說(shuō)直接上代碼


import Foundation

// 使用信號(hào)量
// 初始 A線程的信號(hào)量為 1 ,為了 A 線程不用等待直接執(zhí)行
var ASemaphore = dispatch_semaphore_create(1)
var BSemaphore = dispatch_semaphore_create(0)
var CSemaphore = dispatch_semaphore_create(0)

var queue = dispatch_queue_create("com.maozhua", DISPATCH_QUEUE_CONCURRENT)

dispatch_async(queue) { () -> Void in
    while true{
        dispatch_semaphore_wait(ASemaphore, DISPATCH_TIME_FOREVER);
        print("A")
        dispatch_semaphore_signal(BSemaphore)
    }
}

dispatch_async(queue) { () -> Void in
    while true{
        dispatch_semaphore_wait(BSemaphore, DISPATCH_TIME_FOREVER);
        print("B")
        dispatch_semaphore_signal(CSemaphore)
    }
}

dispatch_async(queue) { () -> Void in
    while true{
        dispatch_semaphore_wait(CSemaphore, DISPATCH_TIME_FOREVER);
        print("C")
        dispatch_semaphore_signal(ASemaphore)
    }
}

//因?yàn)槭菍?xiě)的命令行代碼 所以 開(kāi)啟runloop  保證線程不死
NSRunLoop.mainRunLoop().run()

OK 結(jié)果,代碼可以直接復(fù)制 運(yùn)行 自己試試

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,064評(píng)論 25 709
  • 他,是全世界的寵兒,事業(yè)有成,家庭幸福。無(wú)論身為球員,還是奶爸,他都被追逐。他,叫大衛(wèi)貝克漢姆,一個(gè)總是牽動(dòng)世界的...
    童心稚筆閱讀 1,153評(píng)論 3 6
  • 畢業(yè)以后得日子,我想用兩個(gè)字來(lái)形容:頹廢。每日根本不知道要去做什么,怎樣去做,毫無(wú)目標(biāo)可言,有點(diǎn)像無(wú)頭蒼蠅到處...
    刺魚(yú)兒閱讀 499評(píng)論 0 5
  • 最近各種失眠多夢(mèng)的狀態(tài),剛剛夢(mèng)見(jiàn)你,被夢(mèng)中的你所驚醒,醒后很自然的看了看手機(jī),看了看你的圈已成自然,今天很想你 很...
    小爪1002閱讀 186評(píng)論 0 0

友情鏈接更多精彩內(nèi)容