标签:
处理多线程任务时,如果不加临界区,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 }
标签:
原文地址:http://www.cnblogs.com/littlepear/p/5936502.html