iOS 多线程理解

1、自锁的情况

自己研究了下。在这里记录下自己的理解,希望有大神指教。队列我们分为串行和并行,串行队列中的任务都在一条线程内执行,按照fifo一个接着一个执行。并行队列,可以在多条线程内执行,不需要等待上一个任务执行完,再执行。而任务其实我自己理解的话并不喜欢分为同步和异步,个人理解为任务本身都是函数体,只是由于派发的方式不同造成了不同的执行结果。派发函数分为同步派发和异步派发,当任务是由同步派发方式进行派发时会阻塞当前线程,需等待任务执行完毕后再执行当前线程;而异步派发则不会阻塞当前线程,不需要等待任务执行完毕再执行当前线程。那么什么时候会出现死锁呢,我认为采用“同步派发任务到串行队列并且该队列和派发函数所在的队列是同一个”时会出现死锁,原因是:同步派发需等待任务执行完当前线程才执行,而队列刚好是串行队列,任务需要一个一个执行;这时派发任务会等待串行队列中之前的任务执行完再执行,而当前线程需要等任务执行完后再执行。刚好串行队列中有任务在当前线程为执行完,造成互相等待,形成死锁

应该说是同步派发 不是block派发,同步派发阻塞当前线程,当前线程不能执行,当前的任务要等派发函数执行完成才能执行,而执行函数与当前线程属于同一个串行队列需要等当前线程的任务执行完再执行派发函数体。两者就互相等待了。个人理解

你可能感兴趣的:(iOS 多线程理解)