多线程临界区(windows)/互斥(linux)
来源:互联网 发布:javascript隐藏按钮 编辑:程序博客网 时间:2024/05/17 04:11
在VC6下做的,在LINUX下,将临界换成互斥就OK了。
题目如下:
启动4个线程,向4个文件A,B,C,D里写入数据,每个线程只能写一个值。
线程1:只写1
线程2:只写2
线程3:只写3
线程4:只写4
4个文件A,B,C,D。
程序运行起来,4个文件的写入结果如下:
A:12341234。。。。
B:23412341。。。。
C:34123412。。。。
D:41234123。。。。
// Multithread.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <windows.h>
struct FILEINFO
{
int curnumber;//写入的当前数据
char filename[2];//文件名
CRITICAL_SECTION cs;//临界
FILEINFO()
{
curnumber = 0;
InitializeCriticalSection(&cs);
memset(filename,0,2);
}
};
FILEINFO *pFileInfo =0;
const int MAXFILESIZE=4;
char szfilename[]="ABCD";
/////线程函数////////////////
DWORD WINAPI twritefile(LPVOID parm)
{
int number =(int) parm;
int nIndex = number-1;//保证线程i从文件i-1开始写
FILE *fp;
char szbuf[2];
sprintf(szbuf,"%d",number);
bool isfirst = true;
char sztmp[16]={0};//用来保存文件名
while(true)
{
if(nIndex ==MAXFILESIZE)
nIndex = 0;
EnterCriticalSection(&pFileInfo[nIndex].cs);
if((number-pFileInfo[nIndex].curnumber)!=1 && !isfirst)
{
LeaveCriticalSection(&pFileInfo[nIndex].cs);
nIndex++;
continue;
}
sprintf(sztmp,"%s",pFileInfo[nIndex].filename);
fp = fopen(sztmp,"a+b");
if(fp!=0)
{
fwrite(szbuf,1,1,fp);
fclose(fp);
if(number==MAXFILESIZE) //当为第4个线程时,文件结构的curnumber设置为0;否则,设置为线程ID
pFileInfo[nIndex].curnumber=0;
else
pFileInfo[nIndex].curnumber = number;
isfirst=false;
}
LeaveCriticalSection(&pFileInfo[nIndex].cs);
nIndex++;
}
}
int main(int argc, char* argv[])
{
pFileInfo = new FILEINFO[MAXFILESIZE];
DWORD TID;
for(int nIndex =0;nIndex<MAXFILESIZE;nIndex++)
{
pFileInfo[nIndex].filename[0] = szfilename[nIndex];
}
for(nIndex =1;nIndex<=MAXFILESIZE;nIndex++)
{
CreateThread(NULL,0,twritefile,(void*)nIndex,0,&TID);
}
while(1)
Sleep(100000);
}
- 多线程临界区(windows)/互斥(linux)
- C++ 临界区 多线程同步互斥
- C++ 临界区 多线程同步互斥
- windows&linux多线程互斥
- 多线程同步方法:临界区、事件、信号量、互斥对象
- Windows 临界区 解决进程互斥问题
- windows 互斥及临界区test-demo
- QT多线程临界资源互斥
- 临界区,互斥,信号量
- 临界区,互斥,信号量
- 临界区,互斥,信号量
- 临界区、互斥、信号量
- windows多线程同步--临界区
- 网络编程(38)—— 利用互斥mutex控制多线程对临界区的访问
- Linux和windows临界区 (zz)
- 临界区(锁)windows/linux通用
- Delphi线程同步(临界区、互斥、信号量)
- 使用临界区CRITICAL_SECTION结构对象保护多线程互斥地访问共享资源
- Windows 临界区,内核事件,互斥量,信号量。
- 数据结构和算法方面的书籍
- oracle 常用语句
- VC windows api 多线程---临界区
- dataguard手动switchover切换步骤及注意的问题
- 多线程临界区(windows)/互斥(linux)
- 搜索引擎如何变别网页是否有改动
- Devexpress 报表 显示
- linux 查看系统信息的相关命令
- 深入研究重要的临界区例程
- Error #2044: 未处理的 IOErrorEvent:。 text=Error #2038: 文件 I/O 错误。
- 微软之走向死亡
- ActionContext类-与Servlet API解耦的访问方式
- Android用ImageView显示本地和网上的图片