Как синхронизировать несколько goroutines на одном критическом разделе? - PullRequest
0 голосов
/ 12 марта 2020

Мне нужно синхронизировать ряд goroutines 1..n, которые запускают код на интерпретируемом языке (записан в Go) в критической секции интерпретируемого кода, выполняемой в goroutine k, которая может быть любой из 1..n во время выполнения. То есть, если код в k выполняется в критической секции, все другие процедуры i (i≠k; 1≤k,i≤n) должны быть приостановлены до завершения k. Решение также должно иметь дело с ошибочным вложением критических секций, либо путем обработки на самом внешнем уровне, либо путем сообщения об ошибке.

Проблема заключается в том, что каждая из этих программ может выполнять код с жесткой l oop и я не имею прямого контроля над этим кодом - он интерпретируется, предоставлен пользователем. Вещи, которые я рассмотрел:

  1. Напутайте с переводчиком, чтобы включить какую-то доходность или чеки. Это кажется очень неэффективным способом борьбы с этим. Язык допускает рекурсию, поэтому мне придется проверять каждый вызов функции.

  2. Приостановить выполнение подпрограмм i, пока они работают, из k не по совместительству? Можно ли приостановить goroutine в Go «извне (=k)»?

  3. Предоставить способ на целевом языке для совместной проверки, k работает и останавливается при необходимости. Я не хочу этого делать, так как это в основном утечка абстракции для каналов. Это также усложнит программирование, и я хочу, чтобы мой интерпретируемый язык оставался простым.

Что бы вы порекомендовали. Возможен ли вариант 2? Есть ли другой способ сделать это? Любая помощь с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...