多執行緒六 dispatch semaphore

2021-08-31 21:12:25 字數 857 閱讀 5553

一、定義

訊號量的初始值為1,代表同時只允許1條執行緒訪問資源,保證執行緒同步

例子:

// 執行緒10、7、6、9、8

- (void)test

dispatch_time的宣告如下:

* dispatch_time_t dispatch_time(dispatch_time_t when, int64_t delta);

* 其引數when需傳入乙個dispatch_time_t型別的變數,和乙個delta值。表示when加delta時間就是timeout的時間。

* 例如:dispatch_time_t t = dispatch_time(dispatch_time_now, 110001000*1000);

* 表示當前時間向後延時一秒為timeout的時間。

呼叫一次dispatch_semaphore_signal,剩餘的車位就增加乙個;呼叫一次dispatch_semaphore_wait剩餘車位就減少乙個;

當剩餘車位為0時,再來車(即呼叫dispatch_semaphore_wait)就只能等待。有可能同時有幾輛車等待乙個停車位。有些車主

沒有耐心,給自己設定了一段等待時間,這段時間內等不到停車位就走了,如果等到了就開進去停車。而有些車主就像把車停在這,

所以就一直等下去。

參考 :

關於dispatch_semaphore的使用

六 多執行緒 CAS

鎖的開銷極大。在某些場景,如保證乙個變數的 read modify write操作的原子性。這種場景可以通過使用cas解決而不需要用到鎖。unsafe類中通過cas修改int型別變數原始碼。var1 atomicinteger物件 var2 記憶體偏移量 var4 增加的值 var5 獲取的變數原值...

多執行緒 六 互斥物件

如何控制好多個執行緒相互之間的聯絡,不產生衝突和重複,這需要用到互斥物件,即 system.threading 命名空間中的 mutex 類。我們可以把mutex看作乙個計程車,乘客看作執行緒。乘客首先等車,然後上車,最後下車。當乙個乘客在車上時,其他乘客就只有等他下車以後才可以上車。而執行緒與mu...

爬蟲(六)多執行緒爬蟲

import threading 引入多執行緒模組 import time def run name print name,執行緒執行了!time.sleep 5 建立2個執行緒物件 t1 threading.thread target run,args t1 t2 threading.thread...