网络请求

dispatch_once的原理

2016-11-05  本文已影响91人  袁小童缘

dispatch_once主要是根据onceToken的值来决定怎么去执行代码。

1.当onceToken= 0时,线程执行dispatch_onceblock中代码

2.当onceToken= -1时,线程跳过dispatch_onceblock中代码不执行

3.当onceToken为其他值时,线程被阻塞,等待onceToken值改变

当线程调用shareInstance,此时onceToken= 0,调用block中的代码,此时onceToken的值变为140734537148864。当其他线程再调用shareInstance方法时,onceToken的值已经是140734537148864了,线程阻塞。当block线程执行完block之后,onceToken变为-1.其他线程不再阻塞,跳过block。下次再调用shareInstance时,block已经为-1.直接跳过block

dispatch_once设计挺巧妙的。

上一篇下一篇

猜你喜欢

热点阅读