2012-02-07 71 views
0

我在跨进程共享一个由不同用户创建的进程间命名互斥锁时遇到问题。 第一个过程由服务创建,该服务以LocalSystem身份登录。 第二个过程由我自己创建(只需正常执行过程)。Boost named_mutex无法在由不同用户创建的进程之间共享

两个进程运行此函数(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

(我试图设置互斥名称为“全球\ mymutex”,但不能创建互斥) (我也尝试使用Windows CreateMutex(),但它也从同样的问题受到影响,正如上文kb193073)

谢谢!

西蒙

回答

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