c++多線程例(事件同步對象,變數共用)

來源:互聯網
上載者:User
  1. //事件同步對象
  2. #include <windows.h>
  3. #include <iostream.h>
  4. DWORD WINAPI Fun1Proc(LPVOID lpParameter);//thread data
  5. DWORD WINAPI Fun2Proc(LPVOID lpParameter);//thread data
  6. int tickets=100;//全域變數
  7. HANDLE g_hEvent;//控制代碼
  8. void main()
  9. {
  10. HANDLE hThread1;
  11. HANDLE hThread2;
  12. //建立人工同步對象
  13. g_hEvent=CreateEvent(NULL,FALSE,FALSE,"tickets");
  14. if (g_hEvent)//判斷是否建立成功
  15. {
  16. if (ERROR_ALREADY_EXISTS==GetLastError())
  17. {
  18. cout<<"only one instance can run!"<<endl;
  19. return;
  20. }
  21. }
  22. SetEvent(g_hEvent);//重點就是這個設定
  23. //建立線程
  24. hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
  25. hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
  26. CloseHandle(hThread1);
  27. CloseHandle(hThread2);
  28. //讓主線程睡眠4秒
  29. Sleep(4000);
  30. //關閉事件物件控點
  31. CloseHandle(g_hEvent);
  32. }
  33. //線程1的入口函數
  34. DWORD WINAPI Fun1Proc(LPVOID lpParameter)//thread data
  35. {
  36. while (true)
  37. {
  38. WaitForSingleObject(g_hEvent,INFINITE);
  39. //ResetEvent(g_hEvent);
  40. if (tickets>0)
  41. {
  42. Sleep(1);
  43. cout<<"thread1 sell ticket :"<<tickets--<<endl;
  44. SetEvent(g_hEvent);//重點就是這個設定
  45. }
  46. else
  47. {
  48. SetEvent(g_hEvent);//重點就是這個設定
  49. break;
  50. }
  51. }
  52. return 0;
  53. }
  54. //線程2的入口函數
  55. DWORD WINAPI Fun2Proc(LPVOID lpParameter)//thread data
  56. {
  57. while (true)
  58. {
  59. //請求事件對象
  60. WaitForSingleObject(g_hEvent,INFINITE);
  61. //ResetEvent(g_hEvent);
  62. if (tickets>0)
  63. {
  64. Sleep(1);
  65. cout<<"thread2 sell ticket :"<<tickets--<<endl;
  66. SetEvent(g_hEvent);//重點就是這個設定
  67. }
  68. else
  69. {
  70. SetEvent(g_hEvent);//重點就是這個設定
  71. break;
  72. }
  73. }
  74. return 0;
  75. }

聯繫我們

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