1、实验一 进程的同步与互斥1、实验目的(1)加深对进程概念的理解,明确进程和程序的区别。(2)进一步认识并发执行的实质。(3)分析进程竞争资源现象,学习解决进程互斥的法。(4)了解 Windows 对进程管理的支持。二、实验类型观察/分析型。3、预习内容预习进程管理有关理论和 VC+对进程管理的支持, 包括进程的基本操作和经典的进程同步与互斥问题。4、实验要求本实验通过学习和分析三个简单的 Windows 线程编程编写一个简单的生产者/消费者问题实例程序。利用(1)和(2)中的 Windows 进程和线程创建法实现一个简单的读者,写者程序,读者将110 十个数字依次填入临界资源区 gData,当
2、且仅当 gData 被读者消费后,写者才可以写入下一个数。5、实验代码#include “windows.h“#include #include #include const int writerNum = 1;const int readerNum = 1;int gData = 0;bool continu = true; HANDLE hmutex; HANDLE hfullsemaphore; HANDLE hemptysemaphore; DWORD WINAPI reader(LPVOID lppara)while(continu)WaitForSingleObject(hempt
3、ysemaphore,INFINITE);WaitForSingleObject(hmutex,INFINITE);if(gData = 11)continu = false;break;Sleep(100);printf(“readers gets data:%dn“, gData);printf(“n“);ReleaseMutex(hmutex);ReleaseSemaphore(hfullsemaphore,1,NULL);return NULL;DWORD WINAPI writer(LPVOID lppara)while(continu)WaitForSingleObject(hfu
4、llsemaphore,INFINITE); WaitForSingleObject(hmutex,INFINITE);if(gData = 10)continu = false;break;Sleep(100);gData+;printf(“writer gets data:%dn“, gData);printf(“n“);ReleaseMutex(hmutex); ReleaseSemaphore(hemptysemaphore,1,NULL);return NULL;int main()hmutex = CreateMutex(NULL,false,NULL);hfullsemaphore = CreateSemaphore(NULL,1,1,NULL);hemptysemaphore = CreateSemaphore(NULL,0,1,NULL);DWORD readerdata;DWORD writerdata;for (int i=0;iwriterNum;i+)if(CreateThread(NULL,0,writer,NULL,0,for (int j=0;jreaderNum;j+)if(CreateThread(NULL,0,reader,NULL,0,printf(“Program ends successfullyn“);return 0;