2014-02-04 3 views
1

я ниже программы, но это не удалось удалить named_mutex в конце концов, распечатать результат «Mutex удалить провал»Проблема с удалением повышение :: межпроцессного :: named_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; 
} 

ответ

0

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

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

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

+0

спасибо. Я запускаю unbuntu 12.04 с gcc4.8.1 в режиме отладки. – Michael

+0

Я все еще расследую возможные проблемы с разрешением. Попробуйте 'chown -Rc $ UID/dev/shm' и/или' lsof + D/dev/shm/'для обнаружения любых нарушений обмена – sehe

Смежные вопросы