Go 方法调用与通道调用的使用
我越来越熟悉Go的并发模式,我想澄清一下最佳实践Go 方法调用与通道调用的使用,go,concurrency,channel,goroutine,Go,Concurrency,Channel,Goroutine,我越来越熟悉Go的并发模式,我想澄清一下最佳实践 我知道我们希望使用沟通渠道 在两次狂欢之间。也就是说,在某些情况下 方法调用有意义,或者在每个 情况如何 在通信已处理的消息/结构时 (不是传递/注册的模块等)传递是否更好 按值排序,这样我们就不会冒修改两个goroutine的风险 它同时发生了吗 无法使用方法调用或函数调用与另一个goroutine通信。从goroutine调用函数时,该函数在调用它的goroutine中执行。您只能使用通道与另一个goroutine通信,或者通过共享内存和使用
无法使用方法调用或函数调用与另一个goroutine通信。从goroutine调用函数时,该函数在调用它的goroutine中执行。您只能使用通道与另一个goroutine通信,或者通过共享内存和使用sync包中的同步原语来防止争用情况 问题的第二部分取决于情况
g1:
y:=<-ch
g2:
ch<-x
g1:
y:=您只能使用通道与另一个goroutine进行通信,这并不严格准确:您还可以通过共享内存访问进行通信。但是如果你这样做,你通常需要使用互斥锁。仍然不太正确——“或者通过共享内存在同步包中使用同步原语”是误导。您使用指针共享内存,而不是使用sync
。为了避免竞争条件访问共享内存,您需要使用sync
包同步该访问。两件不同的事情。@BurakSerdar您肯定需要指针来共享内存。否则,您如何让两个goroutine引用相同的内存?@Adrian i:=0;go func(){i++}();go func(){i--}很高兴看到人们讨论这个问题,至少给出一个理由。谢谢你,伙计。。