多執行緒中的ManualResetEvent

2022-01-31 17:29:39 字數 1442 閱讀 4878

先來看一下簡單的多執行緒控制台程式:

using

system;

using

system.threading;

namespace

manualreseteventstudy

}static

void

t2()

}static

void

main(

string

args)

console.read();

}       }}

入口方法main裡,建立了二個執行緒,分別呼叫方法t1與t2,再加上主線程本身,一併有三個執行緒,執行後,三個執行緒都在計數輸出,結果類似如下:

t2的x:1

t1的x:1

主線程中的x:1

t2的x:2

t1的x:2

主線程中的x:2

t2的x:3

t1的x:3

主線程中的x:3

t2的x:4

t1的x:4

主線程中的x:4

t2的x:5

t1的x:5

主線程中的x:5

三個執行緒的順序,在這段**中我們是無法控制的,天知道誰先開始/誰先結束,反正都是"並行"處理,完全看cpu當時的心情  :)

問題:如果需求有變化,比如要求在主線程執行到某個特定的位置(或時間點)時,才讓其它執行緒開始介入,該怎麼做呢?(這種情況實際中很常見,比如某一項計算的入口引數依賴於另一項計算的結果,再比如我們計算月工資前,得先統計出員工當月考勤情況)

system.threading命名空間下有乙個manualresetevent類,可以做到這一點:

using

system;

using

system.threading;

namespace

manualreseteventstudy

}static

void

t2()

}static

void

main(

string

args)

}console.read();

}        }}

t1方法中,我們用 mre.waitone(1000);讓呼叫該方法的執行緒先等候1秒,t2方法中,我們用mre.waitone()無限等候,然後主線程中計數到3的時候,手動呼叫mre.set()方法喚醒所有等候中的執行緒,執行結果類似下面這樣:

主線程中的x:1

主線程中的x:2

t1的x:1

主線程中的x:3

t1的x:2

t2的x:1

主線程中的x:4

t1的x:3

主線程中的x:5

t2的x:2

t1的x:4

t2的x:3

t1的x:5

t2的x:4

t2的x:5

python中的多執行緒是假的多執行緒

python中的多執行緒是假的多執行緒?為什麼這麼說,我們先明確乙個概念,全域性直譯器鎖 gil global interpreter lock python 的執行由python虛擬機器 直譯器 來控制,同時只有乙個執行緒在執行 對python虛擬機器的訪問由全域性直譯器鎖 gil 來控制,正是這...

Loadrunner中的多執行緒

多執行緒 vuser 支援多執行緒環境。多執行緒環境的主要優勢是每個負載生成器都能執行多個 vuser。只有執行緒安全協議才能按執行緒執行。不適用於應用程式管理工具 注意 下列協議不是執行緒安全協議 sybase ctlib sybase dblib informix tuxedo 和 people...

windows中的多執行緒

建立新的執行緒的api函式是createthread hthread createthread security attributes,dwstacksize,threadproc,pparam,dwflags,idthread threadproc函式名 第乙個引數是指向security attr...