多用户信号量

Semaphore for Multiple Users

本文关键字:信号量 多用户      更新时间:2023-10-16

我想实现的:我想将应用程序的实例计数为一个固定的数字。如果启动了应用程序的更多实例,它应该只作为"查看器"工作

下面是示例应用程序

的代码

boost named_semaphore示例

问题:如果所有进程仅从一个用户启动,则可以正常工作但我得到一个安全异常,如果我启动应用程序与另一个用户!!(不允许访问)

有人可以给我指出正确的方向,boost文档在这个主题上有点缺乏;-)
必须设置哪些权限才能允许其他所有登录的用户访问?

我找到了解决方案

看起来Boost的文档并没有那么糟糕:-/http://www.boost.org/doc/libs/1_47_0/doc/html/boost/interprocess/permissions.html

只需通过权限并将其设置为"无限制"

boost::interprocess::permissions permtest;
permtest.set_unrestricted();
_getch();
boost::interprocess::named_semaphore
the_semphore(boost::interprocess::open_or_create,"test_semaphore",3,permtest);

不幸的是,boost使用信号量的默认安全属性,没有办法改变它。使用MFC中的ATL::CSemaphoreCSemaphore,甚至WinApi中的CreateSemaphore,并构建允许每个人访问的安全描述符

我不是真正的Windows专家,所以我不能告诉您答案,但是您需要知道named_semaphores是如何实现的(请参阅boost.interprocess的"一些基本解释"文档),然后查找该资源的权限策略以授予系统范围的访问权限。因此,阅读boost.named_semaphore代码,如果它们使用一个文件,更新该文件的权限,如果它们使用系统调用,阅读该系统调用的Windows API文档。