- 创建一个线程
1 _beginthread(myfun, 0, NULL);//返回值是一个HANDLE
1 hd[i] = CreateThread(NULL, 0, add, NULL, 0, NULL);//创建线程
- 线程内部结束
1 _endthread()
- 外部暂停线程
1 SuspendThread(hd[0]);
- 外部恢复线程
1 ResumeThread(hd[0]);
- 外部结束一个线程
1 ExitThread(th[0]);
- 创建临界区
1 CRITICAL_SECTION cs1;
临界区支持的最大线程数为64
- 初始化临界区
1 InitializeCriticalSection(&cs1);
- 进入临界区
1 EnterCriticalSection(&cs1);
- 离开临界区
1 LeaveCriticalSection(&cs1);
一个示例,一百个线程每个线程对一个变量进行操作
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <Windows.h> 4 #define N 64//临界区最大线程64 5 6 CRITICAL_SECTION cs1 ;//定义临界区 7 8 9 int num = 0;//多线程访问会造成冲突,要用到临界区 10 11 DWORD WINAPI myfun(void *p) 12 { 13 //进入临界区 14 EnterCriticalSection(&cs1); 15 for (int i = 0; i < 10000; i++) 16 { 17 num++; 18 } 19 //离开临界区 20 LeaveCriticalSection(&cs1); 21 return 0; 22 } 23 24 void main() 25 { 26 //初始化临界区 27 InitializeCriticalSection(&cs1); 28 //线程数组 29 HANDLE hd[N]; 30 for (int i = 0; i < N; i++) 31 { 32 //数组每一个元素都是一个线程 33 //hd[i] = (HANDLE)_beginthread(myfun, 0, NULL); 34 hd[i]=CreateThread(NULL, 0, myfun, NULL, 0, NULL); 35 //WaitForSingleObject(hd[i], INFINITE);//等一个线程退出再执行 36 } 37 //等待所有的线程退出 38 WaitForMultipleObjects(N, hd, TRUE, INFINITE); 39 40 printf("%d ", num); 41 42 //删除临界区 43 DeleteCriticalSection(&cs1); 44 system("pause"); 45 }