iOS多線程面試題-啟動三個線程A佳谦,B,C滋戳,打印10次 按照ABC的順序輸出(異步轉(zhuǎn)同步)

題目:
啟動三個線程A钻蔑,B,C奸鸯,打印10次 按照ABC的順序輸出

1. OC 使用NSLock


    NSLock *lockA = [[NSLock alloc] init];
    NSLock *lockB = [[NSLock alloc] init];
    NSLock *lockC = [[NSLock alloc] init];
    
    [lockB lock];
    [lockC lock];
    
    dispatch_queue_t queueA = dispatch_queue_create("queuea", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queueA, ^{
        for (int i = 0; i<10; i++) {
            [lockA lock];
            NSLog(@"A======= %@",@(i));
            [lockB unlock];
        }
    });
    
    dispatch_queue_t queueB = dispatch_queue_create("queueb", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queueB, ^{
        for (int i = 0; i<10; i++) {
            [lockB lock];
             NSLog(@"B======= %@",@(i));
            [lockC unlock];
        }
    });
    
    dispatch_queue_t queueC = dispatch_queue_create("queuec", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queueC, ^{
        for (int i = 0; i<10; i++) {
            [lockC lock];
             NSLog(@"C======= %@",@(i));
             NSLog(@"   ");
            [lockA unlock];
        }
    });

輸出:

2019-06-20 01:06:23.384170+0800 xxtest[2808:669702] A======= 0
2019-06-20 01:06:23.384379+0800 xxtest[2808:669701] B======= 0
2019-06-20 01:06:23.384515+0800 xxtest[2808:669703] C======= 0
2019-06-20 01:06:23.384613+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.384750+0800 xxtest[2808:669702] A======= 1
2019-06-20 01:06:23.384878+0800 xxtest[2808:669701] B======= 1
2019-06-20 01:06:23.384992+0800 xxtest[2808:669703] C======= 1
2019-06-20 01:06:23.385716+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.386194+0800 xxtest[2808:669702] A======= 2
2019-06-20 01:06:23.386590+0800 xxtest[2808:669701] B======= 2
2019-06-20 01:06:23.387100+0800 xxtest[2808:669703] C======= 2
2019-06-20 01:06:23.387497+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.387857+0800 xxtest[2808:669702] A======= 3
2019-06-20 01:06:23.388317+0800 xxtest[2808:669701] B======= 3
2019-06-20 01:06:23.388663+0800 xxtest[2808:669703] C======= 3
2019-06-20 01:06:23.388969+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.389857+0800 xxtest[2808:669702] A======= 4
2019-06-20 01:06:23.390137+0800 xxtest[2808:669701] B======= 4
2019-06-20 01:06:23.390546+0800 xxtest[2808:669703] C======= 4
2019-06-20 01:06:23.390847+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.391203+0800 xxtest[2808:669702] A======= 5
2019-06-20 01:06:23.391476+0800 xxtest[2808:669701] B======= 5
2019-06-20 01:06:23.391854+0800 xxtest[2808:669703] C======= 5
2019-06-20 01:06:23.392134+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.392443+0800 xxtest[2808:669702] A======= 6
2019-06-20 01:06:23.392804+0800 xxtest[2808:669701] B======= 6
2019-06-20 01:06:23.393107+0800 xxtest[2808:669703] C======= 6
2019-06-20 01:06:23.393413+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.393685+0800 xxtest[2808:669702] A======= 7
2019-06-20 01:06:23.394006+0800 xxtest[2808:669701] B======= 7
2019-06-20 01:06:23.394301+0800 xxtest[2808:669703] C======= 7
2019-06-20 01:06:23.394578+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.394959+0800 xxtest[2808:669702] A======= 8
2019-06-20 01:06:23.395532+0800 xxtest[2808:669701] B======= 8
2019-06-20 01:06:23.395873+0800 xxtest[2808:669703] C======= 8
2019-06-20 01:06:23.396117+0800 xxtest[2808:669703] 
2019-06-20 01:06:23.396508+0800 xxtest[2808:669702] A======= 9
2019-06-20 01:06:23.396897+0800 xxtest[2808:669701] B======= 9
2019-06-20 01:06:23.397307+0800 xxtest[2808:669703] C======= 9
2019-06-20 01:06:23.397649+0800 xxtest[2808:669703] 

2. OC 使用dispatch_semaphore

 dispatch_semaphore_t semaA = dispatch_semaphore_create(1);
    dispatch_semaphore_t semaB = dispatch_semaphore_create(0);
    dispatch_semaphore_t semaC = dispatch_semaphore_create(0);
    
    
    dispatch_queue_t queueA = dispatch_queue_create("queuea", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queueA, ^{
        for (int i = 0; i<10; i++) {
            dispatch_semaphore_wait(semaA, DISPATCH_TIME_FOREVER);
            NSLog(@"A======= %@",@(i));
            dispatch_semaphore_signal(semaB);
        }
    });
    
    dispatch_queue_t queueB = dispatch_queue_create("queueb", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queueB, ^{
        for (int i = 0; i<10; i++) {
            dispatch_semaphore_wait(semaB, DISPATCH_TIME_FOREVER);
            NSLog(@"B======= %@",@(i));
            dispatch_semaphore_signal(semaC);
        }
    });
    
    dispatch_queue_t queueC = dispatch_queue_create("queuec", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queueC, ^{
        for (int i = 0; i<10; i++) {
            dispatch_semaphore_wait(semaC, DISPATCH_TIME_FOREVER);
            NSLog(@"C======= %@",@(i));
            NSLog(@"   ");
            dispatch_semaphore_signal(semaA);
        }
    });
    

輸出:

2019-06-20 01:40:25.050013+0800 xxtest[2938:708288] A======= 0
2019-06-20 01:40:25.050183+0800 xxtest[2938:708285] B======= 0
2019-06-20 01:40:25.050297+0800 xxtest[2938:708286] C======= 0
2019-06-20 01:40:25.050391+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.050487+0800 xxtest[2938:708288] A======= 1
2019-06-20 01:40:25.050588+0800 xxtest[2938:708285] B======= 1
2019-06-20 01:40:25.050684+0800 xxtest[2938:708286] C======= 1
2019-06-20 01:40:25.050782+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.050881+0800 xxtest[2938:708288] A======= 2
2019-06-20 01:40:25.050982+0800 xxtest[2938:708285] B======= 2
2019-06-20 01:40:25.051442+0800 xxtest[2938:708286] C======= 2
2019-06-20 01:40:25.051695+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.051928+0800 xxtest[2938:708288] A======= 3
2019-06-20 01:40:25.052162+0800 xxtest[2938:708285] B======= 3
2019-06-20 01:40:25.052414+0800 xxtest[2938:708286] C======= 3
2019-06-20 01:40:25.052841+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.053073+0800 xxtest[2938:708288] A======= 4
2019-06-20 01:40:25.053340+0800 xxtest[2938:708285] B======= 4
2019-06-20 01:40:25.053617+0800 xxtest[2938:708286] C======= 4
2019-06-20 01:40:25.053843+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.054094+0800 xxtest[2938:708288] A======= 5
2019-06-20 01:40:25.055448+0800 xxtest[2938:708285] B======= 5
2019-06-20 01:40:25.055584+0800 xxtest[2938:708286] C======= 5
2019-06-20 01:40:25.055757+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.055888+0800 xxtest[2938:708288] A======= 6
2019-06-20 01:40:25.056116+0800 xxtest[2938:708285] B======= 6
2019-06-20 01:40:25.056455+0800 xxtest[2938:708286] C======= 6
2019-06-20 01:40:25.056871+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.057176+0800 xxtest[2938:708288] A======= 7
2019-06-20 01:40:25.057484+0800 xxtest[2938:708285] B======= 7
2019-06-20 01:40:25.057789+0800 xxtest[2938:708286] C======= 7
2019-06-20 01:40:25.058204+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.058479+0800 xxtest[2938:708288] A======= 8
2019-06-20 01:40:25.058947+0800 xxtest[2938:708285] B======= 8
2019-06-20 01:40:25.059211+0800 xxtest[2938:708286] C======= 8
2019-06-20 01:40:25.059469+0800 xxtest[2938:708286] 
2019-06-20 01:40:25.059701+0800 xxtest[2938:708288] A======= 9
2019-06-20 01:40:25.060025+0800 xxtest[2938:708285] B======= 9
2019-06-20 01:40:25.060360+0800 xxtest[2938:708286] C======= 9
2019-06-20 01:40:25.060585+0800 xxtest[2938:708286] 

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末咪笑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子娄涩,更是在濱河造成了極大的恐慌窗怒,老刑警劉巖映跟,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扬虚,居然都是意外死亡努隙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人挺尿,你說我怎么就攤上這事媒熊。” “怎么了俩莽?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我岭洲,道長,這世上最難降的妖魔是什么坎匿? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任钦椭,我火速辦了婚禮,結(jié)果婚禮上碑诉,老公的妹妹穿的比我還像新娘彪腔。我一直安慰自己,他們只是感情好进栽,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布德挣。 她就那樣靜靜地躺著,像睡著了一般快毛。 火紅的嫁衣襯著肌膚如雪格嗅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天唠帝,我揣著相機與錄音屯掖,去河邊找鬼。 笑死襟衰,一個胖子當著我的面吹牛贴铜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瀑晒,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绍坝,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了苔悦?” 一聲冷哼從身側(cè)響起轩褐,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎玖详,沒想到半個月后把介,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體勤讽,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年拗踢,在試婚紗的時候發(fā)現(xiàn)自己被綠了地技。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡秒拔,死狀恐怖莫矗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情砂缩,我是刑警寧澤作谚,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站庵芭,受9級特大地震影響妹懒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜双吆,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一眨唬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧好乐,春花似錦匾竿、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至反璃,卻和暖如春昵慌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淮蜈。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工斋攀, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梧田。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓淳蔼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柿扣。 傳聞我的和親對象是個殘疾皇子肖方,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,097評論 1 32
  • 本文用來介紹 iOS 多線程中 GCD 的相關(guān)知識以及使用方法。這大概是史上最詳細未状、清晰的關(guān)于 GCD 的詳細講...
    花花世界的孤獨行者閱讀 500評論 0 1
  • iOS多線程編程 基本知識 1. 進程(process) 進程是指在系統(tǒng)中正在運行的一個應(yīng)用程序,就是一段程序的執(zhí)...
    陵無山閱讀 6,043評論 1 14
  • 安迪析桥,成功女性的代表司草。學(xué)歷高艰垂,情商高,看似高冷埋虹,但內(nèi)心善良猜憎,每當姐妹們遇到事情向她訴說時,她都會認真分析并且給出發(fā)...
    愛jian閱讀 145評論 0 0
  • 有時會發(fā)現(xiàn)人和人之間真的有距離搔课,而這種距離并不是離得遠近的距離胰柑,而是靈魂和認知的距離!
    幸福媽媽雨后陽光閱讀 138評論 0 0