Проблема с удалением 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;
}

1 ответ

AFAIK Это происходит в Windows, если мьютекс был создан во время работы с повышенными правами, но вы пытаетесь удалить его как обычный пользователь.

Другими словами, UAC снова все портит.

Теоретически, вы должны иметь возможность устанавливать ACL (списки контроля доступа) для предоставления разрешений предполагаемым пользователям / группам. Я не пробовал это. Я бы посоветовался с Technet и / или местными администраторами, чтобы узнать больше, если вам нужно.

Другие вопросы по тегам