iOS多執行緒互斥同步五種解決方案

2021-07-11 13:48:31 字數 3037 閱讀 6218

在ios中有幾種方法來解決多執行緒訪問同乙個記憶體位址的互斥同步問題:

方法一,@synchronized(id anobject),(最簡單的方法)

會自動對引數物件加鎖,保證臨界區內的**執行緒安全

[cpp]view plain

copy

print?

@synchronized(self)  

方法二,nslock

nslock物件實現了nslocking protocol,包含幾個方法:

lock,加鎖

unlock,解鎖

trylock,嘗試加鎖,如果失敗了,並不會阻塞執行緒,只是立即返回no

lockbeforedate:,在指定的date之前暫時阻塞執行緒(如果沒有獲取鎖的話),如果到期還沒有獲取鎖,則執行緒被喚醒,函式立即返回no

比如:[cpp]view plain

copy

print?

nslock *thelock = [[nslock alloc] init];   

if([thelock lock])   

方法三,nsrecursivelock,遞迴鎖

nsrecursivelock,多次呼叫不會阻塞已獲取該鎖的執行緒。

[cpp]view plain

copy

print?

nsrecursivelock *thelock = [[nsrecursivelock alloc] init];   

void

myrecursivefunction(

intvalue)   

[thelock unlock];   

}   

myrecursivefunction(5);  

方法四,nsconditionlock,條件鎖

nsconditionlock,條件鎖,可以設定條件

[cpp]view plain

copy

print?

//公共部分

id condlock = [[nsconditionlock alloc] initwithcondition:no_data];   

//執行緒一,生產者

while

(true

)   

//執行緒二,消費者

while

(true

)   

方法五,nsdistributedlock,分布鎖

nsdistributedlock,分布鎖,檔案方式實現,可以跨程序

用trylock方法獲取鎖。

用unlock方法釋放鎖。

如果乙個獲取鎖的程序在釋放鎖之前掛了,那麼鎖就一直得不到釋放了,此時可以通過breaklock強行獲取鎖

在ios中有幾種方法來解決多執行緒訪問同乙個記憶體位址的互斥同步問題:

方法一,@synchronized(id anobject),(最簡單的方法)

會自動對引數物件加鎖,保證臨界區內的**執行緒安全

[cpp]view plain

copy

print?

@synchronized(self)  

方法二,nslock

nslock物件實現了nslocking protocol,包含幾個方法:

lock,加鎖

unlock,解鎖

trylock,嘗試加鎖,如果失敗了,並不會阻塞執行緒,只是立即返回no

lockbeforedate:,在指定的date之前暫時阻塞執行緒(如果沒有獲取鎖的話),如果到期還沒有獲取鎖,則執行緒被喚醒,函式立即返回no

比如:[cpp]view plain

copy

print?

nslock *thelock = [[nslock alloc] init];   

if([thelock lock])   

方法三,nsrecursivelock,遞迴鎖

nsrecursivelock,多次呼叫不會阻塞已獲取該鎖的執行緒。

[cpp]view plain

copy

print?

nsrecursivelock *thelock = [[nsrecursivelock alloc] init];   

void

myrecursivefunction(

intvalue)   

[thelock unlock];   

}   

myrecursivefunction(5);  

方法四,nsconditionlock,條件鎖

nsconditionlock,條件鎖,可以設定條件

[cpp]view plain

copy

print?

//公共部分

id condlock = [[nsconditionlock alloc] initwithcondition:no_data];   

//執行緒一,生產者

while

(true

)   

//執行緒二,消費者

while

(true

)   

方法五,nsdistributedlock,分布鎖

nsdistributedlock,分布鎖,檔案方式實現,可以跨程序

用trylock方法獲取鎖。

用unlock方法釋放鎖。

如果乙個獲取鎖的程序在釋放鎖之前掛了,那麼鎖就一直得不到釋放了,此時可以通過breaklock強行獲取鎖

iOS 多執行緒 鎖 互斥 同步

在ios中有幾種方法來解決多執行緒訪問同乙個記憶體位址的互斥同步問題 方法一,synchronized id anobject 最簡單的方法 會自動對引數物件加鎖,保證臨界區內的 執行緒安全 cpp view plain copy print?synchronized self 方法二,nslock...

IOS多執行緒 鎖 互斥 同步

方法一,synchronized id anobject 最簡單的方法 會自動對引數物件加鎖,保證臨界區內的 執行緒安全 synthesize self 方法二,nslock nslock 物件實現了 nslocking protocol 包含幾個方法 lock 加鎖 unlock 解鎖 trylo...

iOS 多執行緒 鎖 互斥 同步

在ios中有幾種方法來解決多執行緒訪問同乙個記憶體位址的互斥同步問題 方法一,synchronized id anobject 最簡單的方法 會自動對引數物件加鎖,保證臨界區內的 執行緒安全 synchronized self 方法二,nslock nslock物件實現了nslocking prot...