/*控制进程并发,实现高效正确的并发誊抄过程*/
#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)
}
return 0;
}
DWORD WINAPI put(LPVOID lParam)
{
LPT