日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线程的临界区

發布時間:2024/9/5 编程问答 63 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线程的临界区 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

臨界區解決線程沖突問題,多個線程操作同一個變量,會引發這樣對待問題。

注意:不要讓多個程序同時訪問一個變量,如果要訪問,急用臨界區來操作,或讓他們每個時間段每個時間段來訪問。

1.下面的程序中,得到的正確結果應該是200000,但是它實際上得到的結果極其不穩定,同時運行每一個線程,可能會有幾個就漏掉了,最后得到的結果也就不穩定了。

#include <stdio.h> #include <stdlib.h> #include <Windows.h> #define N 20int num = 0; DWORD WINAPI add(void *p) {for (int i = 0; i < 10000, i++){num++;} }int main() {HANDLE hd[N];for (int i = 0; i < N; i++){hd[i] = CreatThread(NULL, 0, add, NULL, 0, NULL);}WaitForMultipleObjects(N, hd, TRUE, INFINITE);//等待全部退出pirntf("num-%d", num);system("pause"); }

2要想讓他正確有兩種方法

*1*

#include <stdio.h> #include <stdlib.h> #include <Windows.h> #define N 20int num = 0; DWORD WINAPI add(void *p) {for (int i = 0; i < 10000, i++){num++;} }int main() {HANDLE hd[N];for (int i = 0; i < N; i++){hd[i] = CreatThread( NULL, 0, add, NULL, 0, NULL);
     WaitForSingleObject(hd[i], INFINITE);  //加入的這一行后,
  //進程是一個一個進行的,不會出錯,但是如果單個進程時間長,最后花費的時間會很長。 }WaitForMultipleObjects(N, hd, TRUE, INFINITE);
//等待全部退出pirntf("num-%d", num);system("pause"); }

*2* 通過臨界區

?

#include <stdio.h> #include <stdlib.h> #include <Windows.h> #define N 20int num = 0;

CRITICAL_SECTION cs1
CRITICAL_SECTION cs2;  //定義臨界區,其實質是一個結構體變量,
當訪問cs的時候其他線程都是鎖定的,至少處于一個等待狀態。
DWORD WINAPI add(void *p) {
   EnterCriticalSection(&cs1);  //進入臨界區
for (int i = 0; i < 10000, i++){
     num
++;
  }
  LeaveCriticalSection(&cs1);
}

int main()
{
InitializeCriticalSection(&cs1);  //初始化 ,C++會自動初始化
   HANDLE hd[N];
  
for (int i = 0; i < N; i++)
   {
      hd[i]
= CreatThread(NULL, 0, add, NULL, 0, NULL);
   }
   WaitForMultipleObjects(N, hd, TRUE, INFINITE);
//等待全部退出
   pirntf("num-%d", num);
   DeleteCriticalSection(&cs1);  //釋放,由于該結構體中有指針,這個指針會在堆上開辟內存system(
"pause"); }

?

臨界區特點:臨界區支持的最大線程是64。

?

轉載于:https://www.cnblogs.com/sjxbg/p/5767527.html

總結

以上是生活随笔為你收集整理的线程的临界区的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。