/*控制进程并发,实现高效正确的并发誊抄过程*/
#include "stdio.h"
#include "conio.h"
#include "windows.h"
#include <iostream>
using namespace std;
HANDLE Mutex;
HANDLE buf1_e;
HANDLE buf1_f;
HANDLE buf2_e;
HANDLE buf2_f;
typedef struct _THREADDATA
{
FILE *infile;
char *buf1;
char *buf2;
}*LPTHREADDATA, THREADDATA;
DWORD WINAPI get(LPVOID lParam)
{
LPTHREADDATA pData = (LPTHREADDATA)lParam;
for (;*pData->buf1!=EOF;)
{
WaitForSingleObject(buf1_e,INFINITE);//p
*pData->buf1=fgetc(pData->infile);
ReleaseSemaphore(buf1_f,1,NULL);//v
}
return 0;
}
DWORD WINAPI copy(LPVOID lParam)
{
LPTHREADDATA pData = (LPTHREADDATA)lParam;
for (;*pData->buf1!=EOF;)
{
WaitForSingleObject(buf1_f,INFINITE);//p(buf1_f)
WaitForSingleObject(buf2_e,INFINITE);//p(buf2_e)
*pData->buf2=*pData->buf1;
ReleaseSemaphore(buf1_e,1,NULL);//v(buf1_e)
ReleaseSemaphore(buf2_f,1,NULL);//v(buf2_f)
}
ret
操作系统——控制进程并发,高效并发正确誊抄
最新推荐文章于 2021-04-28 16:31:43 发布
本文介绍了一种使用信号量实现进程并发控制的方法,通过创建和操作Semaphore对象来确保进程间的正确同步。在C++中,三个线程分别负责读取文件、复制内容和写入文件,通过WaitForSingleObject和ReleaseSemaphore实现并发中的顺序控制,从而避免数据竞争,保证了文件拷贝的正确性。
摘要由CSDN通过智能技术生成