как заставить 2 функции следовать друг за другом, только если одна из них закончила свою работу - PullRequest
0 голосов
/ 16 сентября 2018

хорошо, так что у меня есть 2 функции, они оба получают глобальную переменную, и они оба являются потоками,

function 1
get global variable
do something
sleep()

function 2
get global variable
do something
sleep()

сейчас они работают синхронно (одна и та же метка времени для них обоих) или блокируются (func1 переходит в спящий режим и только после того, как он просыпается, затем запускается func2) в зависимости от кода, который я использую я хочу, чтобы func1 выполнял свою работу и ложился спать, и только тогда func2 начинает бегать и ложиться спать, также мне нужен способ убедиться, что они не пытаются переиграть друг друга, если проснутся в одно и то же время .

как мне добиться такого поведения?

1 Ответ

0 голосов
/ 16 сентября 2018

Вам нужно, чтобы каждая функция работала как «критическая секция». Критическим разделом кода является тот, который может быть выполнен только одним потоком за раз. Простой способ старой школы сделать это состоит в том, чтобы использовать алгоритм Петерсона для критических секций. Здесь Для лучшего подхода вы можете синхронизировать потоки, используя locks . Это не позволяет потоку войти в другую функцию, если блокировка не снята первой функцией. Здесь - хорошее место, чтобы прочитать об этом.

...