Использование atomic get / set, чтобы указать, что канал закрыт в го - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть функция, которая будет вызываться в рамках процедуры, которая выдвигается на буферизованный канал.Когда мой контейнер закрывается, я закрываю канал и пытаюсь обработать остальные задания в буферизованном канале, и при этом я делаю atomic.StoreInt32(&r.done, 1).В функции, которая выдвигается на канал, у меня есть

if atomic.LoadInt32(&r.done) == 1 {
    return nil
}

... add job to channel

. Это используется в качестве блокировщика, если канал закрыт (выполняет выключение) и вызывается функция, которая добавляет в очередь.

Поскольку здесь задействован параллелизм, я должен использовать атомарный метод get / set, а не просто устанавливать просто логическое значение done в true, верно?

Имеет ли это смысл и является ли это правильным способом сделать что-то подобное?

Спасибо.

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