У меня есть функция, которая будет вызываться в рамках процедуры, которая выдвигается на буферизованный канал.Когда мой контейнер закрывается, я закрываю канал и пытаюсь обработать остальные задания в буферизованном канале, и при этом я делаю atomic.StoreInt32(&r.done, 1)
.В функции, которая выдвигается на канал, у меня есть
if atomic.LoadInt32(&r.done) == 1 {
return nil
}
... add job to channel
. Это используется в качестве блокировщика, если канал закрыт (выполняет выключение) и вызывается функция, которая добавляет в очередь.
Поскольку здесь задействован параллелизм, я должен использовать атомарный метод get / set, а не просто устанавливать просто логическое значение done в true, верно?
Имеет ли это смысл и является ли это правильным способом сделать что-то подобное?
Спасибо.