互斥鎖和自旋鎖的區(qū)別:互斥鎖會讓線程進入休眠裝備(就緒狀態(tài))等待上一個線程執(zhí)行完操作再去執(zhí)行,自旋鎖會用死循環(huán)的方式,一直等待上一個線程是否執(zhí)行完,執(zhí)行完就不執(zhí)行自己的操作。
模擬賣票
有兩個線程同時賣票,輸出結(jié)果會出現(xiàn)剩余 19 19 18 17.。。的情況
出現(xiàn)兩個19是因為線程在執(zhí)行代碼的時候是由進程操作的,進行線程之間來回切換,當(dāng)進程在第一個線程上執(zhí)行的到-1之前時,切換到了第二個線程,第一個線程會記錄之前的數(shù)據(jù),當(dāng)線程2執(zhí)行完-1,總的票數(shù)變成了19,但是線程1記錄的還是20,進程切換到線程1執(zhí)行代碼的時候還是會輸出19,就出現(xiàn)了錯誤
解決方法:添加互斥鎖,互斥鎖作用是鎖對象,對象需要滿足:1.必須繼承于NSObject 2.必須是全局的,互斥鎖等于是利用了線程同步的原理,多條線程按照順序執(zhí)行。