C 執行緒 三 執行緒同步技術之Join方法

2021-08-01 23:20:36 字數 1571 閱讀 2062

**:

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...