我在跨进程共享名为mutex的提升时遇到问题,这些进程由不同的用户创建。 第一个进程由service创建,登录为LocalSystem。 第二个过程由我自己创建(只需正常执行该过程)。
两个进程都运行此函数(C ++):
void MyFunc()
{
//Open or create the named mutex
named_mutex mutex(open_or_create, "mymutex");
{
scoped_lock<named_mutex> lock(mutex);
DoSomeWork();
}
named_mutex::remove("mymutex");
}
目前,我发现两个进程都能够同时进入DoSomeWork()。 只有当服务登录为“我自己”时才会出现此问题,然后我以管理员身份运行第二个进程。
有没有办法通过boost或一些简单的代码来解决这个问题,而不是这个? http://support.microsoft.com/kb/193073
(我尝试将互斥锁名称设置为“Global \ mymutex”,但不能创建互斥锁) (我也尝试使用Windows CreateMutex(),但它也遇到了同样的问题,如kb193073中所述)
谢谢!
西蒙
答案 0 :(得分:1)
如果你说作为管理员没有问题,也许它与权限有关,试试这个:
void MyFunc()
{
//Open or create the named mutex
permissions allow_all;
allow_all.set_unrestricted();
named_mutex mutex(open_or_create, "mymutex", allow_all);
{
scoped_lock<named_mutex> lock(mutex);
DoSomeWork();
}
named_mutex::remove("mymutex");
}