基於visual c++之windows核心編程程式碼分析(15)使用Mutex同步線程

來源:互聯網
上載者:User

我們編寫多線程應用程式的時候,經常需要進行線程同步協作,我們來實踐一下用Mutex同步線程。請見代碼實現與注釋分析。

 

 

/* 標頭檔 */#include <windows.h>#include <stdio.h>/* 常量定義 */#define NUM_THREADS4 /* 全域變數 */DWORD dwCounter = 0;HANDLE hMutex; /* 函式宣告 */void UseMutex(void);DWORD WINAPI MutexThread(LPVOID lpParam);/************************************** int main(void)* 功能示範** 參數未使用**************************************/int main(){UseMutex();}/************************************** void UseMutex(void)* 功能示範 Mutex 的使用方法** 參數未使用**************************************/void UseMutex(void) {INT i;HANDLE hThread;#ifdef MUTEX// 建立 MutexhMutex = CreateMutex( NULL,                       // 預設安全屬性FALSE,                      // 初始化為未被擁有NULL);                      // 未命名if (hMutex == NULL) {printf("CreateMutex error: %d\n", GetLastError());}#endif// 建立多個線程for(i = 0; i < NUM_THREADS; i++) {hThread = CreateThread(NULL, 0, MutexThread, NULL, 0, NULL); if (hThread == NULL) {printf("CreateThread failed (%d)\n", GetLastError());return;}}Sleep(1000);}/************************************** DWORD WINAPI MutexThread(LPVOID lpParam) * 功能線程函數,讀共用記憶體** 參數未使用**************************************/DWORD WINAPI MutexThread(LPVOID lpParam) {#ifdef MUTEX DWORD dwWaitResult;dwWaitResult = WaitForSingleObject( hMutex,// 控制代碼INFINITE);// 無限等待switch (dwWaitResult) {case WAIT_OBJECT_0: #endif// 等待隨機長的時間,各個線程等待的時間將不一致Sleep(rand()%100);// 得到互斥對象後 訪問共用資料printf("counter: %d\n",dwCounter);// 互斥對象保證同一時間只有一個線程在訪問dwCounterdwCounter++;#ifdef MUTEX// 釋放 Mutexif(!ReleaseMutex(hMutex)){printf("Release Mutex error: %d\n", GetLastError()); }break; default: printf("Wait error: %d\n", GetLastError()); ExitThread(0); }#endifreturn 1;}

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.