【问题标题】:Issue with removing boost::interprocess::named_mutex删除 boost::interprocess::named_mutex 的问题
【发布时间】:2014-02-04 07:21:01
【问题描述】:

我做了下面的程序,但最终没有删除named_mutex,打印出“Mutex delete failure”的结果

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

【问题讨论】:

    标签: c++ boost boost-interprocess


    【解决方案1】:

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

    也就是说,UAC 又把事情搞砸了。

    理论上,您应该能够设置 ACL(访问控制列表)以向预期的用户/组授予权限。我没试过这个。如果您需要,我会咨询 Technet 和/或您当地的管理员以了解更多信息。

    【讨论】:

    • 谢谢。我在调试模式下使用 gcc4.8.1 在 unbuntu 12.04 中运行。
    • 我仍然会调查可能的权限问题。尝试使用chown -Rc $UID /dev/shm 和/或lsof +D /dev/shm/ 来检测任何共享违规
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多