LINUX.ORG.RU

c++ mutex узнать состояние (заблокирован или нет)

 ,


0

2

Добрый день.
Использую std::mutex из c++11
Подскажите пожалуйста, как узнать состояние мьютекса (заблокирован или нет)? Пока единственное, что приходит в голову:

...
std::mutex m;
...
void someThreadFunc() {
    ...
    bool mutexOtherThreadBlock = true;
    bool isLock = m.try_lock();
    if (isLock) {
        mutexOtherThreadBlock = false;
        m.unlock();
    ...
}
...
Но данный способ как-то не очень красив. Может кто знает способ лучше?

★★★★★

Последнее исправление: rumgot (всего исправлений: 1)

while (!lock.try_lock()) ;

вполне

anonymous
()

Чот мне кажется, что если тебе такое в голову пришло напеисать, то что-то в консерватории не то. Чую какой-то говнокод пишешь.

anonymous
()

Но данный способ как-то не очень красив. Может кто знает способ лучше?

Я знаю способ лучше: проектировать код так, чтобы вообще не задаваться этим вопросом ибо он бессмысленный. Потому что просто так узнавать состояние мьютекса не имеет смысла если ты этот мьютекс на забираешь - информация о состоянии устаревает в момент получения. Может быть, тебе вообще condition variable нужно? Чего ты хочешь? Это общее правило: если API что-то тебе не позволяет сделать, то сперва подумай над тем, правильно ли то, чего ты хочешь.

asaw ★★★★★
()
Последнее исправление: asaw (всего исправлений: 3)
Ответ на: комментарий от asaw

Согласен с вами, господа, практического смысла данное действо не несет. Интересует именно чисто спортивный интерес. Так что кому интересно, прошу идей.

rumgot ★★★★★
() автор топика
Ответ на: комментарий от rumgot

Собссно asaw тебе все сказал. Инфа устаревает уже после ее получения при условии, что у тебя не один поток этот мутекс дергает. Так что нет такого способа и быть не может. Если только все остальные потоки не засуспендить и не давать им менять мьютекс.

anonymous
()

Можно создать свой класс mutex с функцией is_locked.

anatoly
()
Ответ на: комментарий от anonymous

Чот мне кажется, что если тебе такое в голову пришло напеисать, то что-то в консерватории не то. Чую какой-то говнокод пишешь.

Аноним шарит.

Pavval ★★★★★
()

Оффтоп: Хватит уже приписывать 11 к слову C++. Это C++ по умолчанию, он такой и есть уже давно. Пора давно писать «старый C++», если речь о 98 или 03, иначе просто C++.

CatsCantFly
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.