資源共享
1塊資源可能會被多個線程共享,也就是多個線程可能會訪問同一塊資源
比如多個線程訪問同一個對象、同一個變量、同一個文件
當多個線程訪問同一塊資源時,很容易引發數據錯亂和數據安全問題
一、解決方案
解決方案:使用線程同步技術(同步,就是協同步調,按預定的先后次序進行)
常見的線程同步技術是:加鎖
1、OSSpinLock
OSSpinLock叫做”自旋鎖”,等待鎖的線程會處于忙等(busy-wait)狀態,一直占用著CPU資源
目前已經不再安全,可能會出現優先級反轉問題
如果等待鎖的線程優先級較高,它會一直占用著CPU資源,優先級低的線程就無法釋放鎖
需要導入頭文件#import<libkern/OSAtomic.h>
2、os_unfair_lock
os_unfair_lock用于取代不安全的OSSpinLock,從iOS10開始才支持
從底層調用看,等待os_unfair_lock鎖的線程會處于休眠狀態,并非忙等
需要導入頭文件#import<os/lock.h>
3、pthread_mutex
mutex叫做”互斥鎖”,等待鎖的線程會處于休眠狀態
需要導入頭文件#import<pthread.h>
pthread_mutex 主站蜘蛛池模板: 汝城县| 财经| 梁山县| 肥西县| 松阳县| 张家港市| 河池市| 灯塔市| 伽师县| 平山县| 共和县| 阳新县| 阳原县| 蚌埠市| 寿宁县| 沂水县| 中牟县| 台前县| 枞阳县| 灵丘县| 定州市| 若尔盖县| 融水| 海南省| 武威市| 高安市| 隆回县| 正宁县| 馆陶县| 九龙城区| 依安县| 镇江市| 农安县| 桐城市| 松桃| 思茅市| 喀喇| 黑山县| 中方县| 郯城县| 杭锦后旗|