сам же заблокировал? ну например
while(true)
{
if(mtx.try_lock())
i++;
}
если нет, то как решить данную проблему?
Не может Не писать код, когда "один поток может зайти в мьютекс который сам же заблокировал"
Это UB, на сколько я помню. Если мьютексы нестандартные, то зависит от операционки. Где-то зайдёт, где-то зависнить( self-deadlock)
Решать — никак, не позволять лочить один мьютекс более одного раза.
студ либа полностью. А какие примитивы использовать тогда? мне нужно получать "разрешение" действующего потока на вход следующего, т.е один закончил залез другой
Заход несколько раз в мьютекс без блокировки на нём называется рекурсивный мьютекс. В WIn мьютексы рекурсивные всегда. В Lin (POSIX) задаётся при создании мьютекса, по умолчанию - НЕ рекурсивный, но можно сделать рекурсивный (он будет чуть дороже в реализации)
Как бы хорошим стилем считается НЕ ПОЛАГАТЬСЯ на рекурсивные мьютексы.
https://en.cppreference.com/w/cpp/thread/recursive_mutex
Обсуждают сегодня