Проблема печати с одновременными подпрограммами в Go

StackOverflow https://stackoverflow.com/questions/8355795

  •  27-10-2019
  •  | 
  •  

Вопрос

У меня есть три параллельных подпрограммы, например,

родовое слово

Теперь, с какой проблемой я столкнулся, иногда случается так, что в результате трех параллельных подпрограмм иногда оператор печати не выполняется должным образом, что означает не печать целиком, есть что-то, вставленное другой печатью.Например, Print (значение a, значение b, значение c) подпрограммы 1 дает результат, подобный значению a, значению b, значению g, где значение g вставляется подпрограммой 2. Может ли кто-нибудь предложить мне, как я могу остановить это?Я пробовал процедуру синхронизации-мьютекса.Однако может быть, мой код слишком длинный, и, возможно, я не могу правильно установить блокировку-разблокировку, поэтому он выдает ошибку взаимоблокировки.Может ли кто-нибудь подсказать мне, как я могу реализовать их простым способом или менее рискованной процедурой синхронизации-мьютекса.

Дополнительную информацию об этой моей проблеме можно найти здесь .

Это было полезно?

Решение

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

Отдельная горутина не делает ничего, кроме чтения с этого канала и распечатывает все, что выходит.Таким образом, отпадает необходимость в блокировках.

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top