Проблема с взаимным выполнением параллельных подпрограмм Go

В моем коде есть три параллельных подпрограммы. Я пытаюсь дать краткий обзор своего кода,

Routine 1 {
do something

*Send int to Routine 2
Send int to Routine 3
Print Something
Print Something*

do something
}

Routine 2 {
do something

*Send int to Routine 1
Send int to Routine 3
Print Something
Print Something*

do something
}

Routine 3 {
do something

*Send int to Routine 1
Send int to Routine 2
Print Something
Print Something*

do something
}

main {
routine1
routine2
routine3
}

я хочу, чтобы, пока коды между двумя что-то делают (коды между двумя звездочками) выполняются, поток управления не должен переходить к другим подпрограммам go. Например, когда подпрограмма 1 выполняет события между двумя звездами (события отправки и печати), подпрограммы 2 и 3 должны быть заблокированы (это означает, что поток выполнения не переходит к подпрограмме 2 или 3 из подпрограммы 1). поток выполнения может перейти к подпрограмме 2 или 3. Может ли кто-нибудь помочь мне, указав, как я могу этого добиться? Возможно ли реализовать вышеуказанную спецификацию с помощью WaitGroup? Может ли кто-нибудь показать мне простой пример, как реализовать указанный выше пример с помощью WaitGroup. Спасибо.

NB: Возможно, это повторный вопрос этого . Я пробовал использовать этот механизм синхронизации-блокировки, однако может быть потому, что у меня большой код, поэтому я не могу правильно установить блокировку-разблокировку, и это создает ситуацию взаимоблокировки (или может быть мой метод ошибка создания ). Может ли кто-нибудь помочь мне с помощью простой процедуры, чтобы я мог этого добиться. Я привожу простой пример своего кода здесь , где Я хочу поместить два отпечатка и посылать событие внутри мьютекса (для подпрограммы 1), таким образом подпрограмма 2 не может его прервать. Вы можете мне помочь, как это возможно. Приведено одно возможное решение: http://play.golang.org/p/-uoQSqBJKS , которое дает ошибку.

0
задан Community 23 May 2017 в 10:08
поделиться