c++怎么实现pv操作?

汪达人 2013-04-26 09:43:15
最近在学操作系统

据我所知,实现线程同步可以用互斥对象或者互斥事件
但是如果用这两个好像不能实现完整的PV操作

我举个例子,比如现在有5个进程,但是资源只允许有2个进程同时运行,用PV操作的解决办法是:
设一个互斥信号量mutex,初值为2,每个进程运行的时候都执行P(mutex),而进程结束之后就执行V(mutex)

觉得好像互斥对象和互斥事件都只能应该对mutex为1的情况,求指教
...全文
758 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
一叶之舟 2013-04-26
  • 打赏
  • 举报
回复
boost中的是mutex,跨平台。
onlyhuiyi 2013-04-26
  • 打赏
  • 举报
回复
引用 楼主 huangjiadog 的回复:
最近在学操作系统 据我所知,实现线程同步可以用互斥对象或者互斥事件 但是如果用这两个好像不能实现完整的PV操作 我举个例子,比如现在有5个进程,但是资源只允许有2个进程同时运行,用PV操作的解决办法是: 设一个互斥信号量mutex,初值为2,每个进程运行的时候都执行P(mutex),而进程结束之后就执行V(mutex) 觉得好像互斥对象和互斥事件都只能应该对mutex为1的情况,求指教
忘了说了。。这几个仅供VC++ 开发参考
ztenv 版主 2013-04-26
  • 打赏
  • 举报
回复
c++实现还是有难 度的,毕竟pv操作是和具体的操作系统相关的,在linux和win有不一样的实现,所以使用具体平台的api吧
赵4老师 2013-04-26
  • 打赏
  • 举报
回复
Synchronization Functions The following functions are used in synchronization. CancelWaitableTimer CreateEvent CreateMutex CreateSemaphore CreateWaitableTimer DeleteCriticalSection EnterCriticalSection GetOverlappedResult InitializeCriticalSection InitializeCriticalSectionAndSpinCount InterlockedCompareExchange InterlockedDecrement InterlockedExchange InterlockedExchangeAdd InterlockedIncrement LeaveCriticalSection MsgWaitForMultipleObjects MsgWaitForMultipleObjectsEx OpenEvent OpenMutex OpenSemaphore OpenWaitableTimer PulseEvent QueueUserAPC ReleaseMutex ReleaseSemaphore ResetEvent SetCriticalSectionSpinCount SetEvent SetWaitableTimer SignalObjectAndWait TimerAPCProc TryEnterCriticalSection WaitForMultipleObjects WaitForMultipleObjectsEx WaitForSingleObject WaitForSingleObjectEx
onlyhuiyi 2013-04-26
  • 打赏
  • 举报
回复




使用这几个函数吧,自己实现一个简单的生产者消费这模式你就会明白信号量机制。
自己实现一个生产者消费者的程序,这个查查GOOGLE吧,应该例子不少,
你就会理解信号量机制。
turing-complete 2013-04-26
  • 打赏
  • 举报
回复
semaphore
onlyhuiyi 2013-04-26
  • 打赏
  • 举报
回复
引用 8 楼 mymtom 的回复:
mutex是semphore的特殊情况. 楼主举的例子,只能用semphore, semphore才有P/V操作之说,mutex只有lock/unlock
当只有一个资源的时候,是否两者 没有太大区别?
mymtom 2013-04-26
  • 打赏
  • 举报
回复
mutex是semphore的特殊情况. 楼主举的例子,只能用semphore, semphore才有P/V操作之说,mutex只有lock/unlock
赵4老师 2013-04-26
  • 打赏
  • 举报
回复
《Windows核心编程》

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧