Joe*_*ool 1 .net c# multithreading
我有课而不是让背景工作者做一些处理器密集型的东西.后台工作者读取一些全局声明的字符串...我是否需要锁定这些字符串?backgroundworker从不编写字符串,它们只是表示在类的构造函数中设置的一些目录位置,并且几乎不会在构造函数之后由类写入(并且永远不会被后台工作者写入).所以这是可能的后台工作能读,因为它也正在由主类对象写入,但不可思议的事的字符串.但是,这些操作(后台工作者的读取和主类的写入)对于字符串文字都不是原子的吗?
谢谢,-Robert
编辑:我不关心字符串是否过时或任何事情(这在我的应用程序中不会是一个大问题),我更担心的是"对象在其他地方使用"异常.
.NET中的字符串是不可变的; 他们无法改变.会发生的是,引用将指向完全不同的字符串,但字符串本身不会更改.
因此,如果您不特别注意后台工作者可能不会使用相同的字符串,如果您更改它,那么您应该没问题.示例:Worker A读取字符串,其他东西更改它,Worker B读取新字符串 - 也许这不会导致问题,也许它会导致问题.但访问字符串本身绝对是安全的.
引用文档:
这种类型是线程安全的.
ETA:Martinho Fernandes在下面的评论中提出了一个非常好的观点:线程安全的对象不能自动地表示你用它们做的一切都是线程安全的.他甚至写了一篇关于那篇文章的博文,这使我不得不再次说出他所做的一切:-)
| 归档时间: |
|
| 查看次数: |
728 次 |
| 最近记录: |