**:
sleep:靜態方法,只能暫停當前執行緒,不能暫停其他執行緒。
join:例項方法,阻塞呼叫執行緒,直到該執行緒終止或經過了指定時間為止。
示例:
using system;
using system.threading;
class threadtest14
} //計算類
public class calculate
//加法運算
分析:呼叫執行緒是主線程,當主線程呼叫了calculate.threadadd.join()的時候,就發生了阻塞,直到加法執行緒執行完畢之後,才繼續執行。
現在我們在來看看join的另外兩個過載方法:join(int32) 和 join(timespan),這兩個方法其實是一樣的,輸入引數說白了就是設定阻塞的等待時間,返回值是bool型別,如果執行緒已終止,則為 true,否則返回 false 。
using system;
using system.threading;
class threadtest15
} //計算類
public class calculate
//加法運算
public void add()
y= x+y=", 1, 2, 1 + 2);
} //新增減法運算
public void sub()
else
thread.sleep(2000);
console.writeline("進入減法運算");
console.foregroundcolor = consolecolor.red;
console.writeline("減法運算結果: x= y= x-y=", 10, 2, 10 - 2);
分析:首先,主線程遇到 calculate.threadadd.join(); 和 calculate.threadsub.join(); 肯定會發生阻塞,等待這兩個執行緒完成後,才會繼續執行,這個不容質疑。
然後我們看加法執行緒和減法執行緒,這兩個執行緒幾乎同時執行,誰先執行,我們是不可預期的。比如先執行加法執行緒,當執行到thread.sleep(5000)的時候,加法執行緒休眠5s,減法執行緒由於呼叫了 threadadd.join(1000); 所以減法執行緒會阻塞1s(此時呼叫執行緒是減法執行緒) ,1s 之後由於加法執行緒還沒有執行完成,所以返回值為 false,減法執行緒繼續執行,減法執行緒執行完畢後,又過了一會,加法執行緒才繼續執行。這樣就會得出我們上面的執行結果。
OpenMP(三) 執行緒同步
1.引言 在openmp中,執行緒同步機制包括互斥鎖同步機制和事件同步機制。2.互斥鎖同步 互斥鎖同步的概念類似於windows中的臨界區 criticalsection 以及windows和linux中的mutex以及vxworks中的semtake和semgive 初始化時訊號量為滿 即對某一塊...
執行緒實用解析 (三)執行緒的同步
上一節主要講了建立呼叫有參 多參 函式的執行緒和執行緒池的一些內容,這一節主要講執行緒的同步。多執行緒的出現解決了吞吐量和響應速度的問題,但同時也帶來了資源共享問題,如死鎖和資源爭用。在為單個資源分配多個執行緒可能會導致同步問題。何為執行緒同步呢?所謂同步,是指多個執行緒之間存在先後執行順序的關聯關...
多執行緒小結(三)執行緒同步總結
一般來說,執行緒同步比較讓人糾結的地方在於它是許多執行緒共用一段 的,而且什麼時候誰用誰不用,也基本是不可控制不可預料的,那麼對於它們可能會同時訪問並更改的資料,就需要加鎖了。加鎖就是將一段 變為臨界區 一段在同一時候只被乙個執行緒進入 執行的 加鎖的方式一般有兩種,lock關鍵字 c 提供lock...