iOS鎖的選型

2021-10-06 07:56:31 字數 914 閱讀 9219

在ios開發中,在多執行緒的情況下,進行操作,為避免亂序,需要鎖保證同一時間只有乙個執行緒在進行讀寫某段讀寫操作。

根據操作的複雜的程度可以決定使用鎖的型別。

如果操作在迴圈50次以下,一般用@synchronized比較簡單,用其他鎖帶來的效能提公升也不明顯

@synchronized(self)
如果操作在迴圈50次以上,就要考慮鎖對效能的影響了,涉及鎖的選型:

1. 一一對應型:需要保證加鎖操作和解鎖操作一一對應,否則會發生死鎖,鎖住執行緒

2.不必一一對應型:無需配對使用

semaphore 訊號量 (同類中效能最好)需要保證加鎖、解鎖一一對應

// wait:訊號量-1,若》=0則執行操作

// signal:訊號量+1

// 如果訊號量引用為0,釋放訊號量,會呼叫dispatch_semaphore_dispose,需要保證此時訊號量值為初始化時候的值,否則屬於等待中訊號量提前釋放,會丟擲異常

dispatch_semaphore_create(long value);

dispatch_semaphore_wait(dispatch_semaphore_t _nonnull dsema, dispatch_time_t timeout);

dispatch_semaphore_signal(dispatch_semaphore_t _nonnull dsema);

// 需要保證加鎖、解鎖一一對應

nslock、pthread_mutex 互斥鎖

// 可以在乙個執行緒中多次獲得,注意乙個執行緒,不必一一對應

nsrecursivelock遞迴鎖

// 可以在不同執行緒中使用,不必一一對應

pthread_mutex(recursive)

分布式鎖的技術選型

一,基於資料庫實現分布式鎖 悲觀鎖 利用select where for update 排他鎖 注意 其他附加功能與實現一基本一致,這裡需要注意的是 where name lock name欄位必須要走索引,否則會鎖表。有些情況下,比如表不大,mysql優化器會不走這個索引,導致鎖表問題。樂觀鎖 所...

iOS中鎖的應用

synchronized 這玩意是對括號內的內容進行加鎖,保證執行緒安全,一般用在偽單例的使用中 nslock 顧名思義,就是乙個簡單的鎖,通過alloc建立後使用,具備lock,unlock以及lockbeforedate方法.其中最後乙個方法表示在指定時間之前。nsconditionlock 條...

iOS 中的各種鎖

在日常開發過程中,為了提公升程式執行效率,以及使用者體驗,我們經常使用多執行緒。在使用多執行緒的過程中,難免會遇到資源競爭問題。我們採用鎖的機制來確保執行緒安全。執行緒安全 當乙個執行緒訪問資料的時候,其他的執行緒不能對其進行訪問,直到該執行緒訪問完畢。即,同一時刻,對同乙個資料操作的執行緒只有乙個...