Я подумываю о некотором примитиве синхронизации, но я не знаю, как называется эта синхронизация или что-то вроде этого будет работать.Параллельный код без ожидания
Таким образом, существует одна переменная (логическая), которая в основном сигнализирует, если один поток все еще работает над блоком памяти или нет. В начале bool устанавливается в false
, то есть рабочий поток не работает на вашем блоке памяти. Теперь основной поток дает рабочему потоку «todo-list», описывая, как он должен работать над этим блоком памяти. После этого он изменяет состояние логического на true
, так что рабочий поток знает, что теперь ему разрешено выполнять свою работу. Основной поток теперь может продолжать свою собственную работу и проверять в определенных местах, если рабочий поток теперь работает, например. если логическое значение снова установлено на false
. Если он равен true
, основной поток просто продолжает свою собственную работу и не ждет рабочего потока. Если логическое значение false
, основной поток знает рабочий рабочий процесс и начинает обработку блока памяти.
Таким образом, логическое значение просто переносит владение над блоком памяти между двумя потоками. Если один поток в настоящее время не имеет права собственности на эту память, он просто продолжает свою собственную работу и неоднократно проверяет, имеет ли он теперь право собственности. Таким образом, ни один из потоков не ждет друг друга и может продолжить свою работу.
Как это называется и как осуществляется такое поведение?
EDIT: В основном это мьютексы. Но вместо ожидания разблокировки мьютекса он продолжает/пропускает критический код.
Это может быть хорошим примером для 'std :: future' и/или' std :: packaged_task'. – amuttsch
Выполнение работы при периодической проверке некоторых внешних событий называется «опрос». Он может быть реализован с помощью атомной переменной. Обычно это не очень хорошая идея. –
Можете ли вы объяснить, почему? –