使用互斥物件實現執行緒同步

2021-05-27 07:37:40 字數 1094 閱讀 8750

使用互斥物件實現執行緒同步

互斥物件屬於系統核心物件,它能夠使執行緒擁有對某個資源的絕對訪問權。互斥物件主要包含使用

數量,執行緒id和遞迴計數器等資訊。其中執行緒id表示當前擁有互斥物件的執行緒,遞迴計數器表示執行緒

擁有互斥物件的次數。

互斥物件的使用方式:當互斥物件的執行緒id為0時,表示互斥物件不被任何執行緒擁有,此時系統會

發出該互斥物件的通知訊號。等待互斥物件的某個執行緒將會擁有該互斥物件,同時互斥物件的執行緒id

為擁有該互斥物件執行緒的id。

當互斥物件的執行緒id不是0時,表示當前有執行緒擁有該互斥物件。系統不會發

出互斥物件的通知訊號。其他等待互斥物件的執行緒繼續等待,直到擁有互斥物件的執行緒釋放互斥物件

的擁有權

相關函式:

createmutex:建立互斥物件

handle createmutex(lpsecurity_attrbutes,lpmutexattributes,bool binitialowner,

lpctstr lpname)

lpmutexattributes:表示互斥物件的安全屬性,可以為null;

binitialowner:表示互斥物件的初始狀態。如果是true,互斥物件的執行緒id為當前呼叫

執行緒的id,互斥物件的遞迴計數器為1,當前建立互斥物件的哦執行緒擁 

有互斥物件的擁有權。如果是false,互斥物件的的id是0,計數器為   

0,系統會發出該互斥物件的通知訊號

releasemutes;釋放互斥物件的擁有權

bool releasemutex(handle hmutex)

waitforsingleobject:獲得互斥物件,具體見事件物件一節中

dword waitforsingleobject( handle hhandle,dword dwmillseconds);

示例:uint output11(lpvoid pthreadparam)

return 0;

}uint output22(lpvoid pthreadparam)

return 0;

}void caccessconflictdlg::onbutton1()

利用互斥物件實現執行緒同步

程式是計算機指令的集合,它以檔案的形式儲存在磁碟上。而程序通常被定義為乙個正在執行的程式的例項,是乙個程式在其自身的位址空間中的一次執行活動 程序從來不執行任何東西,真正完成 執行的是執行緒,而程序只是執行緒的容器,或者說是執行緒的執行環境 當建立乙個程序時,作業系統會自動建立這個程序的第乙個執行緒...

利用互斥物件實現執行緒同步

mutex 屬於核心物件,能夠保證執行緒對單個資源的互斥訪問權。建立互斥物件需要呼叫的函式,createmutex handle winapi createmutex lpsecurity attributes lpmutexattributes 指向security attributes 結構的指...

學習用互斥物件實現執行緒同步

前段時間要做個多執行緒資料共享的例子。多執行緒之間用過不少,資料同步,是第一次做。之前看書的時候看到很多這方面的說明,感覺很複雜,一直沒去深入。這次要做這個應用了,遇上不少問題。一開始就是看不懂網上的教程,看了之後,發現人家講了很多,自己看了,似乎看懂了又沒看懂。嫌麻煩就嘗試用乙個全域性變數來做 忙...