首页 > 代码库 > 线程中的临界区的应用
线程中的临界区的应用
处理多线程任务时,如果不加临界区,CPU来回切换,导致数据出现错误,所以需要用到临界区。
读者可以把Enter和leave屏蔽了看看什么效果。
1 // xiancheng.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <Windows.h> 7 using namespace std; 8 CRITICAL_SECTION cs; //一个结构体,两个LONG型,两个HANDLE型,一个ULONG_PTR型. 9 DWORD WINAPI ThreadProc(LPVOID Param);10 int m, n;11 int main()12 {13 InitializeCriticalSection(&cs);14 HANDLE ThreadHandle[10] = { 0 };15 for (int i = 0; i < 10; i++)16 {17 ThreadHandle[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);18 }19 WaitForMultipleObjects(10, ThreadHandle, TRUE, INFINITE); //TRUE是全部事件都授信了才返回。FALSE一个事件授信才返回。20 DeleteCriticalSection(&cs);21 printf("%d %d"\r\n",m,n);22 return 0;23 }24 DWORD WINAPI ThreadProc(LPVOID Param)25 {26 EnterCriticalSection(&cs);27 for (int i = 0; i < 100000000; i++)28 {29 m++;30 n++;31 }32 printf("%d %d\r\n", m, n);33 LeaveCriticalSection(&cs);34 return 0;35 }
线程中的临界区的应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。