内容简介:翻译自: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# – 线程安全和局部变量》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Python多线程-共享全局变量
- Hystrix 跨线程共享变量 原 荐
- Python的ThreadLocal(线程本地变量)实现
- C++多线程中的锁和条件变量使用
- 并发原理抽丝剥茧,线程本地变量 ThreadLocal 的实现原理
- C++11多线程-条件变量(std::condition_variable)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Swift编程权威指南(第2版)
[美] Matthew Mathias、[美] John Gallagher / 陈晓亮 / 人民邮电出版社 / 2017-6 / 89.00元
Big Nerd Ranch是美国一家专业的移动开发技术培训机构,本书是其培训教材。书中系统讲解了在iOS和macOS平台上,使用苹果的Swift语言开发iPhone、iPad和Mac应用的基本概念和编程技巧。主要围绕使用Swift语言进行iOS和macOS开发,结合大量代码示例,教会读者利用高级iOS和macOS特性开发真实的应用。一起来看看 《Swift编程权威指南(第2版)》 这本书的介绍吧!