国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于死鎖

2019-11-14 18:37:36
字體:
來源:轉載
供稿:網友

示例:一個標準的死鎖

- (void)viewDidLoad{[super viewDidLoad];dispatch_sync(dispatch_get_main_queue(), ^{});}

dispatch_sync(queue, block) 做了兩件事情

  • 將 block 添加到 queue 隊列;
  • 阻塞調用線程,等待 block() 執行結束,回到調用線程。

dispatch_async(queue, block) 也做了兩件事情:

  • 將 block 添加到 queue 隊列;
  • 直接回到調用線程(不阻塞調用線程)。

這里也能看到同步派發和異步派發的區別,就是看是否阻塞調用線程。

 

我們忽略了主線程是先進先出的即(FIFO),而viewdidload這樣的方法是屬于主線程的,所以主線程應該先執行完viewdidload的任務,然后才執行下一個,可是同步的執行加入主線程話就需要viewdidload 先執行完成,viewdidload卻在等待同步的完成所以死鎖了

 

所以記住這個教訓:不要將 block 同步派發到調用 GCD 所在線程的關聯隊列中


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高清| 左权县| 桐城市| 康马县| 北票市| 黄骅市| 类乌齐县| 绥滨县| 会东县| 炉霍县| 五常市| 资中县| 吉木乃县| 嵩明县| 丰顺县| 武定县| 鄯善县| 留坝县| 邯郸市| 玛多县| 兰溪市| 桃园市| 九台市| 比如县| 福贡县| 东丽区| 丹江口市| 阿瓦提县| 建始县| 柞水县| 乐至县| 朝阳县| 成安县| 疏勒县| 苍山县| 平和县| 鄯善县| 崇明县| 兰坪| 兰坪| 福海县|