博客搬家咯~ http://joeleee.github.io/
博客搬家咯~ http://joeleee.github.io/
博客搬家咯~ http://joeleee.github.io/
Clear that!
dispatch_async 是將block發送到指定線程去執行,當前線程不會等待,會繼續向下執行。
dispatch_sync 也是將block發送到指定的線程去執行,但是當前的線程會阻塞,等待block在指定線程執行完成后才會繼續向下執行。
所以為什么 dispatch_sync 使用不當時,容易對當前線程造成死鎖就容易分析了~
dispatch_sync 和 dispatch_async 將block加入到指定線程中后,指定線程都是串行執行的,既FIFO。 所以說 dispatch_sync(queue, ^{}); 這句代碼還是有意義的~ 會阻塞當前線程等待queue中的所有任務執行完成后再向下執行。
不過暫時俺還沒有碰到有必要使用 dispatch_sync 的地方, 看了網上說的 “數據庫需要並發I/O的時候dispatch_sync” ,還是不大了解是什么個場景~ 期待大神點撥。。。
本文理解有誤,看這里吧:http://joeleee.github.io/2017/02/21/%E6%89%92%E4%BA%86%E6%89%92libdispatch%E6%BA%90%E7%A0%81/