无法在不同用户创建的进程之间共享boost named_mutex

时间:2012-02-07 01:45:26

标签: c++ boost mutex boost-mutex

我在跨进程共享名为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中所述)

谢谢!

西蒙

1 个答案:

答案 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");
}