У меня есть интерфейс под названием Setter. Структура с именем SetterImpl реализует этот интерфейс и имеет 2 сеттера, каждый из которых устанавливает 2 интерфейса.
type Setter interface {
A() *AInterface
B() *BInterface
}
type SetterImpl struct {
a *AInterface
b *BInterface
}
func (s *SetterImpl) A(a *AInterface) {
a = a
}
func (s *SetterImpl) B(b *AInterface) {
b = b
}
func returnSetter(a *AInterface, b *BInterface) Setter {
return &SetterImpl{a:a, b:b}
}
Сеттер, возвращенный вышеуказанным методом, находится в куче (скажем, SHeap) и отправлен на сервер gRPC. Теперь я хочу обновить a и b в SetterImpl так, чтобы сервер gRPC использовал новые значения.
Итак, у меня сейчас 2 программы; один из них - это основная процедура сервера gRPC (скажем, MAIN), другой - разветвленный (скажем, FORKED), который просто предназначен для обновления полей установщика.
Если я использую Mutex в FORKED, это, по сути, добавляет забор (например, Java). На самом деле он не блокирует никакие переменные (кроме себя).
Я не хочу, чтобы MAIN мог читать a и b, хранящиеся в SHeap, пока FORKED обновляет их. Потоки API (goroutines) на сервере не получают Read Mutex перед чтением значений в SHeap. Итак, возможно ли сделать то, что я пытаюсь достичь? Если да, как мне этого добиться?