IZ
Size: a a a
IZ
t
IZ
DS
K
N2
K
d
IZ
K
d
K
d
K
C
VS
D
D
d
C
if(CondMx.try_lock()){sleep_1_seconds();print_note_we_were_there(); CondMx.unlock();}else{print_not_locked()};sleep_for(1 мкс);- это в цикле
pLog->info("std::unique_lock<std::mutex>");Собственно, иногда проскакивают ситуации, когда после вызова std::unique_lock цикл потока успевает несколько раз(точно больше одного) пройтись через try_lock->unlock
std::unique_lock<std::mutex> lk(CondMx);
pLog->info("std::unique_lock<std::mutex>:DONE");
//далее не интересно, там потом есть unlock
[14:14:27:852503][T:11332][CVTest:T] Locked. Sleeping //try_lock успешен. Спим 1 секунуВ общем, вопрос: кккакого чёрта?
[14:14:28:180536][T:10184][CVTest:I] std::unique_lock<std::mutex> //пробуем заблокировать мьютекс через unique_lock
[14:14:28:853603][T:11332][CVTest:T] Wake! -проснулись
[14:14:28:854603][T:11332][CVTest:T] UNlock - разблокировались
[14:14:28:855603][T:11332][CVTest:T] Locked. Sleeping - вот тут ожидалось увидеть std::unique_lock<std::mutex>:DONE от потока 10184
[14:14:29:856703][T:11332][CVTest:T] Wake!
[14:14:29:857704][T:11332][CVTest:T] UNlock
[14:14:29:858704][T:11332][CVTest:W] BAD_LOCK // а здесь уже try_lock не сработал.
[14:14:29:858704][T:10184][CVTest:I] std::unique_lock<std::mutex>:DONE