1

我在跨进程共享名为 mutex 的 boost 时遇到问题,这些进程由不同的用户创建。第一个进程是由服务创建的,它以 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() 。只有当服务以“我自己”身份登录,然后我以管理员身份运行第二个进程时,才会出现此问题。

有没有办法通过提升或一些简单的代码来解决这个问题,而不是这个? http://support.microsoft.com/kb/193073

(我尝试将互斥锁名称设置为“Global\mymutex”,但无法创建互斥锁)(我也尝试使用 Windows CreateMutex(),但它也遇到了同样的问题,如 kb193073 中所述)

谢谢!

西蒙

4

1 回答 1

1

If you say that as admin there is no problem, maybe it's got something to do with permissions, try this:

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");
}
于 2012-11-21T10:41:41.280 回答