栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如果我正确使用通道,是否需要使用互斥锁?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如果我正确使用通道,是否需要使用互斥锁?

如果正确使用通道,则不需要互斥。在某些情况下,使用互斥锁的解决方案可能会更简单。

只需确保包含通道值的变量已正确初始化,然后使用多个goroutine尝试访问通道变量即可。一旦完成,按设计访问通道(例如,向它们发送值或从中接收值)是安全的。

带有参考文献的证明文件(重点由我添加):

规格:渠道类型:

单个信道 ,可以使用
在发送的语句,接收操作,并调用内置的功能

cap

通过任何数量的够程无需进一步同步
。通道充当先进先出队列。例如,如果一个goroutine在通道上发送值,而第二个goroutine接收到它们,则按发送顺序接收值。
len




有效执行:并发:通过交流共享

实现对共享变量的正确访问所需的微妙之处使得在许多环境中进行并行编程变得很困难。Go鼓励采用一种不同的方法,在这种方法中,共享值在通道中传递,实际上,决不由单独的执行线程主动共享。
在任何给定时间,只有一个goroutine可以访问该值。 根据设计,不会发生数据争用。为了鼓励这种思维方式,我们将其简化为一个口号:

不要通过共享内存进行通信; 而是通过通信共享内存。

这种方法可能太过分了。例如,最好通过将互斥锁放在整数变量周围来完成引用计数。但是,作为一种高级方法,使用通道来控制访问权限使编写清晰,正确的程序变得更加容易。

本文也非常有帮助:Go Memory Model

还引用了的打包文档

sync

包同步提供基本的同步原语,例如互斥锁。除一次和等待组类型外, 大多数都供低级库例程使用。 更高级别的同步最好通过渠道和通信来完成。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号