-
操作系统中的进程同步和互斥代码涉及到奇偶数问题(具体要求请参阅资源描述)
资源介绍
三个进程P1,P2,P3,以及有N(>1)个单元的缓冲区。P1调用produce()产生一个整数,调用put()将其放入缓冲区。P2调用getodd()从缓冲区取出一个奇数,然后调用countodd()计算奇数的个数;P2调用geteven()从缓冲区取出一个偶数,然后调用counteven()计算偶数的个数。用信号量机制实现进程同步
使用到的函数和信号量
HANDLE mutex;
HANDLE empty;
HANDLE full;
创建信号量
HANDLE CreateSemaphore(
__in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是信号量的安全属性 可为NULL
__in LONG lInitialCount,// lInitialCount是初始化的信号量
__in LONG lMaximumCount,// lMaximumCount是允许信号量增加到最大值
__in_opt LPCWSTR lpName//lpName是信号量的名称 可为NULL
);
创建互斥信号量
HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, // 指向安全属性的指针 可为NULL
BOOL bInitialOwner, // 初始化互斥对象的所有者
LPCTSTR lpName // 指向互斥对象名的指针
);
申请一个资源
WaitForSingleObject(HANDLE full,INFINITE);
释放资源
ReleaseSemaphore(
__in HANDLE hSemaphore,// hSemaphore是要增加的信号量句柄
__in LONG lReleaseCount,// lReleaseCount是增加的计数。
__out_opt LPLONG lpPreviousCount//lpPreviousCount是增加前的数值返回。
);
释放互斥信号量
BOOL ReleaseMutex(HANDLE hMutex);
DWORD WaitForMultipleObjects(
DWORD nCount, // number of handles in array
CONST HANDLE *lpHandles, // object-handle array
BOOL bWaitAll, // wait option
DWORD dwMilliseconds // time-out interval
);
- 上一篇: 编程模拟进程的同步与互斥c语言编写的操作系统题
- 下一篇: 操作系统进程同步和互斥的实验报告