#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <process.h>
#include <locale>
UINT WINAPI ThreadWriter1(void *ptr);
UINT WINAPI ThreadWriter2(void *ptr);
UINT WINAPI ThreadReader(void *ptr);
HANDLE hMutex, pipeRead, pipeWrite;
uintptr_t Threads[3];
int count = 50;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "Russian");
CreatePipe(&pipeRead,&pipeWrite,NULL,NULL);
system("pause");
while (count)
{
Threads[0] = _beginthreadex(0,0,ThreadWriter1,0,0,0);
Threads[1] = _beginthreadex(0,0,ThreadReader,0,0,0);
Threads[2] = _beginthreadex(0,0,ThreadWriter2,0,0,0);
Threads[1] = _beginthreadex(0,0,ThreadReader,0,0,0);
WaitForMultipleObjects(3, (HANDLE*)Threads, TRUE, INFINITE);
count--;
}
system("pause");
return 0;
}
UINT WINAPI ThreadWriter1(void *ptr)
{
char buf[32]="1";
DWORD dw;
if(!(hMutex=CreateMutex(0, false, L"MutexWriter1"))) OpenMutex(MUTEX_ALL_ACCESS,FALSE,L"MutexWriter1");
WriteFile(pipeWrite,buf,1,&dw,NULL);
printf("Writer1 write\n");
ReleaseMutex(hMutex);
return 0;
}
UINT WINAPI ThreadWriter2(void *ptr)
{
char buf[32]="2";
DWORD dw;
if(!(hMutex=CreateMutex(0, false, L"MutexWriter2"))) OpenMutex(MUTEX_ALL_ACCESS,FALSE,L"MutexWriter2");
WriteFile(pipeWrite,buf,1,&dw,NULL);
printf("Writer2 write\n");
ReleaseMutex(hMutex);
return 0;
}
UINT WINAPI ThreadReader(void *ptr)
{
char buf[32]={0};
DWORD dw=0;
if(!(hMutex = CreateMutex(0, false , L"MutexReader"))) OpenMutex(MUTEX_ALL_ACCESS, false, L"MutexReader");
ReadFile(pipeRead, buf, 1, &dw, 0);
printf("Reader read: %s\n\n",buf);
ReleaseMutex(hMutex);
return 0;
}