使用Semaphore进行进程同步

更新时间:2023-06-23 05:14:14 阅读: 评论:0

使⽤Semaphore进⾏进程同步
  最近写⼀个⼩东西,要求六个进程之间同步。可以实现同步的⽅法由很多,最开始的想法是使⽤信号量来实现:建议⼀个控制进程,创建⼀个信号量,将最⼤资源计数设置为要同步的进程数,可⽤资源设置为0,⽽待同步进程则等待信号量的触发。
雪山岩  ⾸先做了⼀个⼩实验,⼀个控制进程,3个同步进程,信号量的最⼤资源计数为2,。这个实验只是验证下Semaphore的⽤法,代码如下,注意错误处理等都没有加⼊。
  控制进程: 
  HANDLE hSemaphore = CreateSemaphore(NULL, 0, 2, "Robots_Sync_Signal");
红包祝福语格式  //......After Certain Operations
  if(!ReleaSemaphore(hSemaphore, 2, &lPreCount))
    ......
  同步进程:
我爱夏天作文
  HANDLE hSemaphore = OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE, FALSE, "Robots_Sync_Signal");
主动的近义词  WaitForSingleObject(hSemaphore, INFINITE);
  cout<<"Got Signal!"<<endl;
  //......After Certain Operations
  if(!ReleaSemaphore(hSemaphore, 1, &lPreCount))
乔迁请帖>百寿图书法    ......
  实验很成功,能观察到,在控制进程relea信号量以后,两个同步进程取得信号量并执⾏,只有在这两个进程之⼀释放信号量以后,第三进程才能获取。
  需要注意的是打开信号量时的权限问题,如果OpenSemaphore时权限为NULL,则在XP下会打开失败,LastError为:Access Denied,必须明确地赋予权限。蛙泳视频教程
  SYNCHRONIZE为等待函数WaitForSingleObject()需要的权限,⽽SEMAPHORE_MODIFY_STATE为ReleaSemaphore()所需要的权限
>孤独寂寞图片

本文发布于:2023-06-23 05:14:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1050817.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信号量   进程   控制   打开   权限   注意   需要   资源
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图