試著用c寫了一個多線程的同步

來源:互聯網
上載者:User

標籤:

在Java中寫多線程相關的程式簡單很多,在多線程中需要同步的時候,使用synchronized就行了。

最近學習c的多線程與同步,感覺實現起來,要寫的代碼比較多一些,這也許是因為java封裝的比較好吧。

下面是今天寫的一個例子,主要參考:http://hi.baidu.com/personnel/blog/item/ae87720e8b2f5aea7acbe1c6.html

#include <stdio.h>#include <windows.h>#include <process.h>//關鍵段變數聲明HANDLE g_hThreadEvent;CRITICAL_SECTION g_csThreadCode;int total = 0; //全部變數unsigned int __stdcall threadFun(void *pm){    int v = *(int *)pm;    SetEvent(g_hThreadEvent); //觸發事件    Sleep(50);    EnterCriticalSection(&g_csThreadCode); //進入子線程互斥地區    total++;    printf("thread no:%d,total:%d\n",v,total);    LeaveCriticalSection(&g_csThreadCode); //離開子線程互斥地區    return 0;}int main(){    //初始化事件和關鍵段 自動置位,初始無觸發的匿名事件    g_hThreadEvent = CreateEvent(NULL, FALSE, FALSE, NULL);    //關鍵段初始化    InitializeCriticalSection(&g_csThreadCode);    int i;    int THREAD_NUM = 10; //子線程數    HANDLE handle[THREAD_NUM];    for(i=0;i<THREAD_NUM;i++)    {        handle[i] = _beginthreadex(NULL,0,threadFun,&i,0,NULL);        WaitForSingleObject(g_hThreadEvent, INFINITE); //等待事件被觸發,這裡必須    }     WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);     //用完之後記得銷毀     CloseHandle(g_hThreadEvent);     DeleteCriticalSection(&g_csThreadCode);    return 0;}

 

運行結果:

這個例子主要測試兩點:

1. 主線程與子線程的同步,使用事件(Event),參考:http://blog.csdn.net/morewindows/article/details/7445233

2. 各子線程間的同步,使用關鍵段(CRITICAL_SECTION),參考:http://blog.csdn.net/morewindows/article/details/7442639

另註:

實現主線程與子線程的同步,有幾種方式:事件(Event)、訊號量(Semaphore)。

實現子線程的同步,有幾種方式,比如:關鍵段(CRITICAL_SECTION),互斥量(Mutex)。

 

關於子線程間的兩種同步方式的對比,參見:http://hi.baidu.com/personnel/blog/item/fd4a7609ffba398f2fddd436.html 

 

2012-05-13

試著用c寫了一個多線程的同步

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.