Size: a a a

2021 July 03

NK

Nikolay Kononov in C++ Together 2.0
да он не совсем на спинлоке
источник

RM

Roy Mustang in C++ Together 2.0
Тогда смотри
источник

RM

Roy Mustang in C++ Together 2.0
Не быстрее ли будет два мьютекса ебануть
источник

NK

Nikolay Kononov in C++ Together 2.0
скорее всего быстрее
источник

RM

Roy Mustang in C++ Together 2.0
Логика вот какая
источник

NK

Nikolay Kononov in C++ Together 2.0
потому что мьютексы если КОРОТКАЯ критическая секция просто в цикле крутятся примерно как у тебя
источник

RM

Roy Mustang in C++ Together 2.0
Один поток проскальзывает через оба мьютекса и делает pop
источник

NK

Nikolay Kononov in C++ Together 2.0
а если длинная засыпают
источник

RM

Roy Mustang in C++ Together 2.0
в этот момент второй поток проскальзывает между двумя мьютексами
источник

RM

Roy Mustang in C++ Together 2.0
все остальные потоки ждут на первом мьютексе
источник

RM

Roy Mustang in C++ Together 2.0
то есть, получается некая очередь из потока, который уже занят чем то, из потока который вот вот займет место рабочего потока и потоки которые ждут пока тот что готовится уйдет
источник

RM

Roy Mustang in C++ Together 2.0
С логической точки зрения, было бы лучше сразу отправить другие потоки спать, если мы точно можем определить будет ли попадать поток в спинлок промежуток
источник

RM

Roy Mustang in C++ Together 2.0
Точнее, успеет ли этот поток стать рабочим пока он спинлочится
источник

RM

Roy Mustang in C++ Together 2.0
А то получается что все потоки без дела спинлочатся, но смысл в этом если один поток только пролезет потом
источник

RM

Roy Mustang in C++ Together 2.0
Получается, что логичней сразу отправить 6 потоков в сон, 1 на спинлок, другой на работу
источник

RM

Roy Mustang in C++ Together 2.0
Получается, как только рабочий закончит, то тот что спинлочится станет рабочим, а те 6 потоков (какой то из них проснется) и пролезет в спинлок на ожидание
источник

RM

Roy Mustang in C++ Together 2.0
Sleeped -> Waited -> Worked
источник

RM

Roy Mustang in C++ Together 2.0
Что-то типа такого
источник

RM

Roy Mustang in C++ Together 2.0
хмм, ну как сделать так чтоб один поток прошел в работу, а второй поток прошел между двумя мьютексами?
источник

RM

Roy Mustang in C++ Together 2.0
scoped_lock?
источник