從乙個多執行緒的例子,來理解Sleep的機制和用法

2021-06-18 00:24:41 字數 905 閱讀 1460

這個例子是兩個執行緒用於售票,保證輪流售票的有序性。

#include #include dword winapi fun1proc(lpvoid lpparameter);//執行緒1

dword winapi fun2proc(lpvoid lpparameter);//執行緒2

int tickets=60000;//總票數

handle hmutex;

//主函式

void main()

//執行緒1的入口函式

dword winapi fun1proc(lpvoid lpparameter)

{ while (true)

{releasemutex(hmutex);

waitforsingleobject(hmutex,infinite);

if (tickets>0)

{sleep(1);

cout<<"thread1 sell ticket :"<0)

{sleep(1);

cout<<"thread2 sell ticket :"<

關於使用sleep的一些看法:

(1)不用sleep並且執行緒不阻塞,sleep(1)可以使得cpu的負荷減少接近40%

(2)sleep(0)觸發作業系統重新進行乙個cpu競爭,即重新排程。作業系統監控有執行緒霸佔cpu的情況,  如果發現,就強制掛起該執行緒。在這個程式中,主線程sleep(500000),就可以看作是長期霸佔cpu的情況。

(3)如果主線程sleep的時間,不足以執行完子執行緒的任務,主線程強制退出並釋放資源則子執行緒非正常退出,  於是整個程式崩潰掉。

(4)sleep的作用是忙等,誰呼叫它誰就睡覺,時間到了以後該執行緒進入就緒佇列。

其他概念:

從乙個MysqL的例子來學習查詢語句

自上學這麼多年以來,得出了從乙個例子入手來學習是最快最有效,並能培養出很強的實踐能力,這是一種很 好的學習方法。不訪試試。比如看一本書的時候從各章節的例子入手,找出不了解的以及不懂的還是新知識,進而有針對性的學習。看看下面的例子 ip getenv remote addr echo ip conn ...

從乙個MysqL的例子來學習查詢語句

自上學這麼多年以來,得出了從乙個例子入手來學習是最快最有效,並能培養出很強的實踐能力,這是一種很 好的學習方法。不訪試試。比如看一本書的時候從各章節的例子入手,找出不了解的以及不懂的還是新知識,進而有針對性的學習。看看下面的例子 ip getenv remote addr echo ip conn ...

從乙個MysqL的例子來學習查詢語句

自上學這麼多年以來,得出了從乙個例子入手來學習是最快最有效,並能培養出很強的實踐能力,這是一種很 好的學習方法。不訪試試。比如看一本書的時候從各章節的例子入手,找出不了解的以及不懂的還是新知識,進而有針對性的學習。看看下面的例子 ip getenv remote addr echo ip conn ...