dispatch_once的原理

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設計挺巧妙的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容