首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理并发读取?

处理并发读取?
EN

Stack Overflow用户
提问于 2014-03-15 04:14:17
回答 2查看 82关注 0票数 2

我对并发编程还不熟悉,我想到了一个特定的情况,我想要一些投入。如果我将从多个线程访问一个变量,但只读取该值(它不是常量的唯一原因是因为我需要在运行时设置它),那么是否需要一个互斥变量呢?或者,您只需要担心在也有写到共享资源时的争用条件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-15 04:28:47

如果在启动线程之前设置了值,则不需要互斥对象。如果在启动线程后设置值,则需要互斥以确保所有线程都读取相同的值。

票数 3
EN

Stack Overflow用户

发布于 2014-03-15 08:07:30

这取决于您所说的语言和机器体系结构,以及在该语言中“读取变量”意味着什么。当“读取变量”转换为仅从机器级的内存读取时,并发读取本身通常是安全的。当然,您需要确保您的程序中没有任何其他内容可以转换为相同的内存区域。

许多主流语言(Java、C#、C、C++)对程序如何转换为内存访问提供了非常弱的保证。同时,你得到的保证往往以非常复杂的规则的形式出现,比如说,在什么时候,哪些语句序列可能被重新排序。为了避免引入真正难以找到的bug,通常最好是要求您所需的同步属性尽可能地不精细和具体化,即使用互斥。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22419435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档