c# – 线程安全和局部变量

栏目: ASP.NET · 发布时间: 7年前

内容简介:翻译自:https://stackoverflow.com/questions/679448/thread-safety-and-local-variables

如果我有这样的局部变量:

Increment()
{
    int i = getFromDb(); // get count for a customer from db 
};

这是一个增加的实例类(每次客户 – 一个实例对象 – 进行购买),这个变量线程是否安全?我听说局部变量是线程安全的,因为每个线程都有自己的堆栈等等.

另外,我是否认为这个变量是共享状态?我在思维部门缺乏的是这个变量将与不同的客户对象(例如John,Paul等)合作,因此是线程安全的,但这是有缺陷的思维,并且在并发编程方面缺乏经验.这听起来很天真,但是我在并发编码方面没有很多经验,就像我一般的同步编码一样.

编辑:此外,函数调用getFromDb()不是问题的一部分,我不希望任何人猜测它的线程安全性,因为它只是一个调用,指示值是从一个从数据库获取数据的函数分配的.

编辑2:此外,getFromDb的线程安全性得到保证,因为它只执行读取操作.

我被声明为一个本地(方法)变量,所以它通常只存在于Increment()的堆栈框架中 – 所以是的,我是线程安全的……(虽然我不能评论getFromDb).

除非:

>增量是一个迭代器块(即使用收益率或收益率中断)

>我用于匿名方法(委托{i = i 1;})或lambda(foo => {i = i foo;}

在上述两种情况下,有些情况下它可以暴露在堆栈外部.但我怀疑你是否也在做.

请注意,字段(类上的变量)不是线程安全的,因为它们很容易暴露给其他线程.静态字段更加明显,因为所有线程自动共享相同的字段(线程静态字段除外).

翻译自:https://stackoverflow.com/questions/679448/thread-safety-and-local-variables


以上所述就是小编给大家介绍的《c# – 线程安全和局部变量》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据结构与算法

数据结构与算法

BrunoRPreiss / 电子工业出版社 / 2003-1 / 55.00元

本书是作者根据他在滑铁卢大学计算机工程学院教授数据结构与算法课程的经验编写而成的。它采用C++面向对象的设计模式,不仅系统全面地介绍了各种传统的数据结构,还把它们按照类和类层次的现代理念予以展开,进而达到抽象结构与实际设计的完美统一。本书的后三章通过引入抽象问题求解的概念,集中讲述了算法技术和各算法之间的关系。另外,作者运用一定的数学工具以及必要的分析技术和分析理论,对每种数据结构及相关算法都进行一起来看看 《数据结构与算法》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换