久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

秒殺多線程第四篇 一個經(jīng)典的多線程同步問題

 Fredanf 2012-08-30
 

秒殺多線程第四篇 一個經(jīng)典的多線程同步問題

分類: Windows多線程 Windows編程 12110人閱讀 評論(23) 收藏 舉報

上一篇《秒殺多線程第三篇原子操作 Interlocked系列函數(shù)》中介紹了原子操作在多進程中的作用,,現(xiàn)在來個復雜點的。這個問題涉及到線程的同步和互斥,,是一道非常有代表性的多線程同步問題,,如果能將這個問題搞清楚,那么對多線程同步也就打下了良好的基礎,。

 

程序描述:

主線程啟動10個子線程并將表示子線程序號的變量地址作為參數(shù)傳遞給子線程,。子線程接收參數(shù) -> sleep(50) -> 全局變量++ -> sleep(0) -> 輸出參數(shù)和全局變量。

要求:

1.子線程輸出的線程序號不能重復,。

2.全局變量的輸出必須遞增,。

下面畫了個簡單的示意圖:

分析下這個問題的考察點,主要考察點有二個:

1.主線程創(chuàng)建子線程并傳入一個指向變量地址的指針作參數(shù),,由于線程啟動須要花費一定的時間,,所以在子線程根據(jù)這個指針訪問并保存數(shù)據(jù)前,主線程應等待子線程保存完畢后才能改動該參數(shù)并啟動下一個線程,。這涉及到主線程與子線程之間的同步,。

2.子線程之間會互斥的改動和輸出全局變量。要求全局變量的輸出必須遞增,。這涉及到各子線程間的互斥,。

 

下面列出這個程序的基本框架,可以在此代碼基礎上進行修改和驗證,。

  1. //經(jīng)典線程同步互斥問題  
  2. #include <stdio.h>  
  3. #include <process.h>  
  4. #include <windows.h>  
  5.   
  6. long g_nNum; //全局資源  
  7. unsigned int __stdcall Fun(void *pPM); //線程函數(shù)  
  8. const int THREAD_NUM = 10; //子線程個數(shù)  
  9.   
  10. int main()  
  11. {  
  12.     g_nNum = 0;  
  13.     HANDLE  handle[THREAD_NUM];  
  14.       
  15.     int i = 0;  
  16.     while (i < THREAD_NUM)   
  17.     {  
  18.         handle[i] = (HANDLE)_beginthreadex(NULL, 0, Fun, &i, 0, NULL);  
  19.         i++;//等子線程接收到參數(shù)時主線程可能改變了這個i的值  
  20.     }  
  21.     //保證子線程已全部運行結束  
  22.     WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);    
  23.     return 0;  
  24. }  
  25.   
  26. unsigned int __stdcall Fun(void *pPM)  
  27. {  
  28. //由于創(chuàng)建線程是要一定的開銷的,,所以新線程并不能第一時間執(zhí)行到這來  
  29.     int nThreadNum = *(int *)pPM; //子線程獲取參數(shù)  
  30.     Sleep(50);//some work should to do  
  31.     g_nNum++;  //處理全局資源  
  32.     Sleep(0);//some work should to do  
  33.     printf("線程編號為%d  全局資源值為%d\n", nThreadNum, g_nNum);  
  34.     return 0;  
  35. }  

運行結果可以參考下列圖示,,強烈建議讀者親自試一試。

1

2

3

可以看出,,運行結果完全是混亂和不可預知的,。本系列將會運用Windows平臺下各種手段包括關鍵段,事件,,互斥量,,信號量等等來解決這個問題并作一份全面的總結,敬請關注,。

 

秒殺多線程第五篇 經(jīng)典線程同步 關鍵段CS》已經(jīng)發(fā)布,,歡迎參閱。

秒殺多線程第六篇 經(jīng)典線程同步 事件Event》已經(jīng)發(fā)布,,歡迎參閱。

秒殺多線程第七篇 經(jīng)典線程同步 互斥量Mutex》已經(jīng)發(fā)布,,歡迎參閱,。

秒殺多線程第八篇 經(jīng)典線程同步 信號量Semaphore》已經(jīng)發(fā)布,歡迎參閱,。 

 

 

轉載請標明出處,,原文地址:http://blog.csdn.net/morewindows/article/details/7442333

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多