繁体   English   中英

删除boost :: interprocess :: named_mutex的问题

[英]Issue with removing boost::interprocess::named_mutex

我做了下面的程序,但最后还是无法删除named_mutex,打印出“ Mutex删除失败”的结果

void IPC::testNamedMutex()
{
named_mutex mutex(open_or_create, "MyMutex");
for (int i = 0; i < 10; i++)
{
    mutex.lock();
    cout << "Mutex taken" << endl;

    std::fstream fs("test.txt", std::fstream::out | std::fstream::app);
    if (fs)
    {
        fs << "Thread id: " << boost::this_thread::get_id() << ", "
                << "Iteration " << i << endl;
    }

    boost::this_thread::sleep(boost::posix_time::seconds(1));
    mutex.unlock();
    cout << "Mutex is unlocked" << endl;

}
cout << "Delete the file and mutex?(y/n): ";
char c;
cin >> c;
if (c == 'y' || c == 'Y')
{
    if (remove("test.txt"))
        cout << "File deleted" << endl;
    else
        cout << "File delete failed" << endl;

    bool success=named_mutex::remove("MyMutex");
    if (success)
        cout << "Mutex removed" << endl;
    else
        cout << "Mutex delete failure" << endl;
}
}

但是,如果我使用下面的第二个程序运行删除,则它可以工作。 可能是什么原因?

void IPC::testDeleteNamedMutex()
{
cout << named_mutex::remove("MyMutex") << endl;
}

AFAIK如果在提升的上下文中运行时已创建互斥锁,则在Windows上会发生这种情况,但是您尝试以普通用户的身份删除它。

换句话说,UAC再次破坏了事物。

从理论上讲,您应该能够设置ACL(访问控制列表)以将权限授予目标用户/组。 我没有尝试过。 如果需要,我会咨询Technet和/或您的本地管理员以了解更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM