⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.cpp

📁 这是操作系统的上机资料,关于线程同步和互斥的
💻 CPP
字号:
// 1.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include "Mutex.h"
#include "Semaphore.h"
#include "1.h"
#define N 10
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
static HANDLE h1;
static HANDLE h2;
static HANDLE full;
static HANDLE empty;
HANDLE mutex;
static int count1=1;
static int count2=1;
void producer();
void consumer();

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

using namespace std;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
	int nRetCode=0;
	DWORD  dwThreadID1,dwThreadID2;
full=CreateSemaphore(NULL,0,N,"full");
	if(full==NULL) printf("full Create Fail!\n");
	else printf("full Create Success!\n");
empty=CreateSemaphore(NULL,N,(N+1),"empty");
	if(empty==NULL) printf("empty Create Fail!\n");
	else printf("empty Create Success!\n");
mutex=CreateMutex(NULL,FALSE,NULL);
	if(mutex==NULL) printf("mutex Create Fail!\n");
	else printf("mutex Create Success!\n");

	h1=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
					0,
					(LPTHREAD_START_ROUTINE)producer,
					(LPVOID)NULL,
					0,&dwThreadID1);
	       if(h1==NULL) printf("Thread1 create Fail!\n");
	       else printf("Thread1 create Success!\n");

	h2=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
					0,
					(LPTHREAD_START_ROUTINE)consumer,
					(LPVOID)NULL,
					0,&dwThreadID2);
	      if (h2==NULL) printf("Thread2 create Fail!\n");
	      else printf("Thread2 create Success!\n");

    _sleep(1000);

	CloseHandle(h1);
	CloseHandle(h2);
    CloseHandle(full);
    CloseHandle(empty);
    CloseHandle(mutex);

	ExitThread(0);
	return nRetCode;
}





void producer()
{
	while(true)
{
		WaitForSingleObject(empty,INFINITE);
WaitForSingleObject(mutex,INFINITE);
     printf("生产者生产:\n");
     printf("count1 in producer=%d\n",count1);
	 ReleaseMutex(mutex);
ReleaseSemaphore(full,1,NULL);
count1++;
if(count1>20) 
break;
}
}



void consumer()
{
	while(true)
{
  WaitForSingleObject(full,INFINITE);
	WaitForSingleObject(mutex,INFINITE);
    printf("消费者消费:\n");
printf("count2 in consumer=%d\n",count2);
	ReleaseMutex(mutex);
   ReleaseSemaphore(empty,1,NULL);    
count2++;
if(count2>20) 
break;
	}
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -