您的位置:首页 > 其它

多线程应用——(四)

2015-08-06 12:14 288 查看
前言:1.多线程在访问同一个变量或同一块区域时要使用临界区

2.临界区内最多线程数目是64

3.windows 下,CreateThread(WinAPI函数)与临界区相关的函数匹配使用

4._beginthread函数是CRT(C Running Time)相关函数

#define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<process.h>
#include <time.h>
#define THREAD_NUM 64 //临界区线程数最大是64


int num = 0;

CRITICAL_SECTION cs;  //定义临界区,结构体变量

DWORD WINAPI test(void * p)
{
EnterCriticalSection(&cs);
for (int i = 0; i < 100; i++)
{
num++;
}
LeaveCriticalSection(&cs);

return 0;
}

void main()
{
InitializeCriticalSection(&cs);//初始化临界区

HANDLE hd[THREAD_NUM];
for (int i = 0; i < THREAD_NUM; i++)
{
hd[i] = CreateThread(NULL, 0, test, NULL, 0, NULL);
//WaitForSingleObject(hd[i], INFINITE);//解决多线程对全局变量的访问冲突问题,方法一:使用同步技术,缺点是单个线程的执行时间不宜太长
}

WaitForMultipleObjects(THREAD_NUM, hd, TRUE, INFINITE);

printf("%d\n", num);
DeleteCriticalSection(&cs);
getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: