首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

多线程互斥,该怎么解决

2012-01-22 
多线程互斥thread1{// do something...}一个进程中同时创建了多个thread1 如何使每个thread1执行完do some

多线程互斥
thread1{
  // do something
  ...
}

一个进程中同时创建了多个thread1 如何使每个thread1执行完do something 其他的thread1才可以执行

[解决办法]
给个例子给你
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
HANDLE hFile;//全局对象
//定义临界区对象
CRITICAL_SECTION cs;
//写文件线程函数
DWORD WINAPI Thread(LPVOID lpParam)
{
//得到是哪个线程
int n=(int)lpParam;
DWORD dwWrite;
for (int i=0;i<10000;i++)
{//进入临界区
EnterCriticalSection(&cs);
char Data[512]="------------------------by 认真的雪------------------------\r\n-------------------http://www.nohack.cn-------------------";
//写入文件
WriteFile(hFile,&Data,strlen(Data),&dwWrite,NULL);
//出临界区
LeaveCriticalSection(&cs);
}
//输出哪个线程运行结束
printf("第%d号线程结束运行\n",n);
return 0;
}
int main(int argc, char* argv[])
{
//创建文件
hFile=CreateFile("c:\\hack.txt",GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
printf("CreateFile Error\n");
return 0;
}
DWORD ThreadId;
HANDLE hThread[5];
//初始化临界区对象
InitializeCriticalSection(&cs);
//创建5个线程
for(int i=0;i<5;i++)
{
hThread[i]=CreateThread(NULL,NULL,Thread,LPVOID(i+1),0,&ThreadId);
printf("第%d号线程创建成功\n",i+1);
}
//等待五个线程运行结束
WaitForMultipleObjects(5,hThread,true,INFINITE);
//删除临界区对象
DeleteCriticalSection(&cs);
//关闭文件句柄
CloseHandle(hFile);
return 0;
}

热点排行