多用户信号量
Semaphore for Multiple Users
我想实现的:我想将应用程序的实例计数为一个固定的数字。如果启动了应用程序的更多实例,它应该只作为"查看器"工作
下面是示例应用程序
的代码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::CSemaphore
或CSemaphore
,甚至WinApi中的CreateSemaphore
,并构建允许每个人访问的安全描述符
我不是真正的Windows专家,所以我不能告诉您答案,但是您需要知道named_semaphores是如何实现的(请参阅boost.interprocess的"一些基本解释"文档),然后查找该资源的权限策略以授予系统范围的访问权限。因此,阅读boost.named_semaphore代码,如果它们使用一个文件,更新该文件的权限,如果它们使用系统调用,阅读该系统调用的Windows API文档。
相关文章:
- 删除旧的信号量系统V
- 父进程和子进程之间的 POSIX 信号量
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 多线程.如果我使用信号量,我可以在开始时创建很多线程还是应该只有几个线程?
- 张量(多维数组)是树前瞻数据的有效存储类型吗?
- C/C++ - 用于按顺序打印数字的 sem_t 类型的单个信号量
- 单车道桥 使用信号量进行同步
- 用于 64 位/32 位 IPC 的 POSIX 信号量的替代方案?
- 这个餐饮哲学家问题(dpp)的解决方案是如何工作的?互斥体和信号量
- 发布信号量返回错误 6(无效句柄)
- 在 C Linux 中使用三个线程使用信号量同步按顺序打印 3 4 5 50 次
- 在使用 pthread 和信号量实现生产者-消费者问题时需要帮助
- 如何让一个线程继续,而另一个线程正在等待C++中的信号量
- 实现信号量
- 如何在多核系统上实现信号量
- C++ System V 信号量:多个服务器进程,一个客户端进程
- 可以通过减少多线程中系统调用(互斥/信号量)的开销来真正提高性能::atomic
- c++中的多线程,只检查信号量是否被锁定
- 等待多个信号量而不等待(C/ c++ Linux)
- 多用户信号量