日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

dispatch_queue_create(com.biostime.xxx, DISPATCH_QUEUE_SERIAL)的陷阱

發布時間:2023/11/27 生活经验 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dispatch_queue_create(com.biostime.xxx, DISPATCH_QUEUE_SERIAL)的陷阱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼

for(int i =0;i<10;i++)
??? {
??????? NSLog(@"i=%d",i);
??????? dispatch_queue_t mySerialQueue = dispatch_queue_create("com.biostime.xxx", DISPATCH_QUEUE_SERIAL);
??????? __block int d = i;
??????? dispatch_async(mySerialQueue, ^{
??????????? NSRunLoop *loop = [NSRunLoop currentRunLoop];
??????????? NSLog(@"%p excute1 i = %d d=%d",loop,i,d);
??????????? d=9;
??????????? NSLog(@"%p excute2 i = %d d=%d",loop,i,d);
??????? });
??????? NSLog(@"i=%d",i);
??? }

?

=============

2015-05-29 14:38:49.322 GCDDemo[8558:405173] operation begin
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for begin 0
2015-05-29 14:38:49.322 GCDDemo[8558:405173] mySerialQueue 0x7fb0b051d490
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for end 0
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for begin 1
2015-05-29 14:38:49.322 GCDDemo[8558:405173] mySerialQueue 0x7fb0b05835e0
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for end 1
2015-05-29 14:38:49.322 GCDDemo[8558:405173] for begin 2
2015-05-29 14:38:49.323 GCDDemo[8558:405173] mySerialQueue 0x7fb0b05858b0
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for end 2
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for begin 3
2015-05-29 14:38:49.323 GCDDemo[8558:405208] <NSThread: 0x7fb0b07136e0>{number = 2, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405209] <NSThread: 0x7fb0b0711f50>{number = 3, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405207] <NSThread: 0x7fb0b057bde0>{number = 4, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0509480
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for end 3
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for begin 4
2015-05-29 14:38:49.323 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0516280
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for end 4
2015-05-29 14:38:49.323 GCDDemo[8558:405173] for begin 5
2015-05-29 14:38:49.323 GCDDemo[8558:405215] <NSThread: 0x7fb0b0627e90>{number = 5, name = (null)} === begin
2015-05-29 14:38:49.323 GCDDemo[8558:405216] <NSThread: 0x7fb0b0506f70>{number = 6, name = (null)} === begin
2015-05-29 14:38:49.337 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0610000
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for end 5
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for begin 6
2015-05-29 14:38:49.337 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0623fa0
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for end 6
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for begin 7
2015-05-29 14:38:49.337 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0612e10
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for end 7
2015-05-29 14:38:49.337 GCDDemo[8558:405173] for begin 8
2015-05-29 14:38:49.338 GCDDemo[8558:405173] mySerialQueue 0x7fb0b062a590
2015-05-29 14:38:49.338 GCDDemo[8558:405173] for end 8
2015-05-29 14:38:49.338 GCDDemo[8558:405173] for begin 9
2015-05-29 14:38:49.338 GCDDemo[8558:405217] <NSThread: 0x7fb0b050bbd0>{number = 7, name = (null)} === begin
2015-05-29 14:38:49.338 GCDDemo[8558:405173] mySerialQueue 0x7fb0b0626860
2015-05-29 14:38:49.338 GCDDemo[8558:405173] for end 9
2015-05-29 14:38:49.338 GCDDemo[8558:405218] <NSThread: 0x7fb0b0502770>{number = 8, name = (null)} === begin
2015-05-29 14:38:49.338 GCDDemo[8558:405173] operation end
2015-05-29 14:38:49.338 GCDDemo[8558:405219] <NSThread: 0x7fb0b050e2b0>{number = 9, name = (null)} === begin
2015-05-29 14:38:49.338 GCDDemo[8558:405220] <NSThread: 0x7fb0b05132e0>{number = 10, name = (null)} === begin
2015-05-29 14:38:49.339 GCDDemo[8558:405221] <NSThread: 0x7fb0b04297c0>{number = 11, name = (null)} === begin
2015-05-29 14:38:51.326 GCDDemo[8558:405208] <NSThread: 0x7fb0b07136e0>{number = 2, name = (null)} === end
2015-05-29 14:38:51.326 GCDDemo[8558:405209] <NSThread: 0x7fb0b0711f50>{number = 3, name = (null)} === end
2015-05-29 14:38:51.326 GCDDemo[8558:405207] <NSThread: 0x7fb0b057bde0>{number = 4, name = (null)} === end
2015-05-29 14:38:51.339 GCDDemo[8558:405215] <NSThread: 0x7fb0b0627e90>{number = 5, name = (null)} === end
2015-05-29 14:38:51.339 GCDDemo[8558:405216] <NSThread: 0x7fb0b0506f70>{number = 6, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405217] <NSThread: 0x7fb0b050bbd0>{number = 7, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405220] <NSThread: 0x7fb0b05132e0>{number = 10, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405218] <NSThread: 0x7fb0b0502770>{number = 8, name = (null)} === end
2015-05-29 14:38:51.343 GCDDemo[8558:405221] <NSThread: 0x7fb0b04297c0>{number = 11, name = (null)} === end
2015-05-29 14:38:51.344 GCDDemo[8558:405219] <NSThread: 0x7fb0b050e2b0>{number = 9, name = (null)} === end
?解析:

dispatch_queue_create,用DISPATCH_QUEUE_SERIAL參數創建的是串行隊列。那么,只要id相同,返回的都是同一個queue嗎?

答案是,錯誤。

從日志中可以看到,系統生成的10個子線程來執行任務。所以,10個block仍然是并行執行。

label的作用,文檔中指出,僅僅為了在debug,instrument,crash report中進行線程標識。

所以,label并不是線程的unique id,而是可以多個線程共用同一個id。

?請不要被label所誤導。

轉載于:https://www.cnblogs.com/so-magic/p/4529388.html

總結

以上是生活随笔為你收集整理的dispatch_queue_create(com.biostime.xxx, DISPATCH_QUEUE_SERIAL)的陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。