方法一,
@synchronized(id
anobject),(
最簡單的方法
),會自動對引數物件加鎖,保證臨界區內的**執行緒安全
@synthesize(self)
方法二,
nslock
nslock
物件實現了
nslocking protocol
,包含幾個方法:
lock
,加鎖
unlock
,解鎖
trylock
,嘗試加鎖,如果失敗了,並不會阻塞執行緒,會立即返回no
lockbeforedate:
,在指定的
date
之前暫時阻塞執行緒(如果沒有獲取鎖的話),如果到期還沒有獲取鎖,則執行緒被喚醒,函式立即返回
no
nslock *thislock = [[nslock alloc] init];
if ([thislock lock])
方法三,
nsrecursivelock
,遞迴鎖
nsrecursivelock
,多次呼叫不會阻塞已獲取該鎖的執行緒。
nsrecursivelock *thelock = [[nsrecursivelock alloc] init];
void myfunction(int value)
[thelock unlock];
}myfunction(5) ;
方法四,
nsdistributedlock
,分布鎖
nsdistributedlock
,分布鎖,檔案方式實現,可以跨程序 用
trylock
方法獲取鎖。 用
unlock
方法釋放鎖。
如果乙個獲取鎖的程序在釋放鎖之前掛了,那麼鎖就一直得不到釋放了,此時可以通過
breaklock
強行獲取鎖。
方法五,
nsconditionlock
,條件鎖
nsconditionlock
,條件鎖,可以設定條件
//公共部分
id conditionlock = [[nsconditionlock alloc] initwithcondition:no_data];
//執行緒一,生產者
while (true)
//執行緒二,消費者
while (true)
iOS 多執行緒 鎖 互斥 同步
在ios中有幾種方法來解決多執行緒訪問同乙個記憶體位址的互斥同步問題 方法一,synchronized id anobject 最簡單的方法 會自動對引數物件加鎖,保證臨界區內的 執行緒安全 cpp view plain copy print?synchronized self 方法二,nslock...
iOS 多執行緒 鎖 互斥 同步
在ios中有幾種方法來解決多執行緒訪問同乙個記憶體位址的互斥同步問題 方法一,synchronized id anobject 最簡單的方法 會自動對引數物件加鎖,保證臨界區內的 執行緒安全 synchronized self 方法二,nslock nslock物件實現了nslocking prot...
iOS 多執行緒 鎖 互斥 同步
方法一,synchronized id anobject 最簡單的方法 會自動對引數物件加鎖,保證臨界區內的 執行緒安全 cpp view plain copy print synchronized self 方法二,nslock nslock物件實現了nslocking protocol,包含幾個...