thread-safety相关内容
哪以下两个code片断的是更好地使用? 静态只读对象_locker =新的对象(); 锁(_locker) 或 锁(本) 这是当前实例的对象。那么,为什么是锁(_locker)总是在书? 相关: 为什么锁(本){…}?坏 解决方案 有可能是一个很大的区别。两者之间最大的区别在于,第一个例子使用一个单一的对象锁定(因此静态关键字)
..
可能有人请帮我以下的问题: 有两个类的MainForm和LWriter。下面是从LWriter的方法,除了在写入文件发送一些更新RichTextBox控件(通过mainForm.UpdateLog(文本))。一切正常,然而,这WriteOutput方法也做了一些在计算过程中冻结的形式广泛的处理。 我觉得WriteOutput应该被封装在一个单独的线程。可能有人请帮我解释如何将WriteOutp
..
我读的一些有关的 SyncRoot上图案作为一般规则,以避免死锁。而前读了几年的问题(见本链接) ,我想我明白,这种模式的某些应用可能不正确。尤其是,我把重点放在下面的句子从这个话题: 你会发现System.Collections中在许多的正宗SyncRoot属性。在retrospeced,我觉得这个属性是一个 错误...请放心,我们不会再犯同样的错误,我们建立 这些集合的仿制版本。的 事
..
我已经经历了它写在所有的静态类是线程安全的MSDN走了。那么这篇文章是为1.1版本... http://msdn.microsoft.com /en-us/library/d11h6832(v=vs.71).aspx 所有公共静态成员(方法,属性,字段和事件)内内的多线程环境中的.NET Framework的支持并发访问。因此,任何.NET框架的静态成员可以同时从两个线程调用,而不会遇到竞争条
..
MSDN文档的StringBuilder的正规“线程安全”部分指出,“任何实例成员都不能保证是线程安全的”,但这种说法感觉它已经被复制和粘贴,几乎每一个类的框架: 不过,这些博客文章由加文·普格提的StringBuilder的线程安全的行为: 此外,StringBuilder的源码,反射显现,伴随的评论 在SSCLI源,也表明许多实施注意事项,以保证线程安全: 没有人有任何更深入地了解一个S
..
我有一个处理与外部服务的通信后台线程。每次后台线程接收到一个消息,我想将它传递给供进一步处理UI线程(显示给用户)。 目前我做了一个在Timer.Tick定期汇总,并填写了后台线程一个线程安全的消息队列。但是这种解决方案是次优。 你知道如何使用消息泵从后台线程事件传递到UI线程? 解决方案 有一些技巧。 Control.Invoke() (等) 我发现这个WinForms的技术始终
..
修改的介绍: 我们知道,在C#中的ref参数传递一个的引用的一个变量,允许外部变量本身被一个名为方法中改变。但是处理很像C指针(读原始变量的当前内容与每一个访问该参数和改变与每次修改于该参数的原始变量)的参考,或可被调用的方法依靠对一个一致的参考呼叫的持续时间?前者带来了一些线程安全问题。特别是: 我已经写在C#中的静态方法,通过引用传递对象: 公共静态无效的寄存器(REF定义newDe
..
我有这样的功能: 静态字典< INT,INT> KeyValueDictionary =新字典< INT,INT>(); 静态无效IncreaseValue(INT KEYID,INT调整) { 如果(!KeyValueDictionary.ContainsKey(KEYID)) { KeyValueDictionary.Add(KEYID
..
MSDN文档指出静态通用队列是线程安全的。这是否意味着以下code是线程安全的?换句话说,就是有一个问题,当一个线程入队一个int而另一个线程队列中取出一个int在同一时间?我一定要锁入队和出队操作的线程安全? 类测试{ 公共静态队列< INT>队列=新问答其中,诠释>(10000); 螺纹putIntThread; 螺纹takeIntThread;
..
可能重复: 嗨,什么是让C#词典中的线程安全的最简单的方法是什么? preferablly只用锁(对象),但任何其他的想法表示欢迎! 解决方案 在.NET 4中,你有的 ConcurrentDictionary 类。 如果你需要使用.NET的旧版本,并希望自己写的: 包装一个字典作为一个私人字段在你的类 使用一个单独的对象lockObject 在就这一锁定 lockObject 周围
..
更新:我只是偶然发现了这埃里克利珀的回答以另一个问题(他引用规范): 读取和其他类型的读写, 包括长,ULONG,双,和 小数,以及用户定义 类型,不能保证是 原子。 确定,所以读双是没有的原子。这意味着价值可能被修改年年读,对不对?那么,如何读双值以原子? 我注意到有一个但是没有 Interlocked.Read 为双值,即使 System.Double 是一个64位的值。 我看到在
..
我想创建在C#中的线程安全性,我想确保我在正确的路径 - 这里是我做了什么 - 私人只读对象AvgBuyPriceLocker =新的对象(); 私人双人_AvgBuyPrice; 私人双人AvgBuyPrice { 得到 { 锁定(AvgBuyPriceLocker) { 返回_AvgBuyPrice; }
..
根据 MSDN : volatile关键字表示字段可能被修改 正在执行的同时多线程。字段是 声明为volatile不受编译器优化, 假定由单个线程访问。这确保了最 最多最新的值是在任何时候都实地present。 请注意最后一句: 这确保了最先进的最新值是在任何时候都present在外地。的 然而,有与此关键字的一个问题。 我已经 读 之能指令变更单: 第一指令第二指令对它们进行
..
我清楚MemoryBarrier的使用,而不是在背后运行时的场景会发生什么。谁能给了发生在一个很好的解释? 解决方案 在一个真正强大的内存模型,发光护栏说明是不必要的。所有的内存访问将顺序执行,所有商店将是全局可见。 需要 内存栅栏,因为目前的通用架构不提供强大的内存模型 - 86 / 64例如可以重新排序读相对于写。 (一更彻底的来源是的 “英特尔®64和IA-32架构软件开发者手册,8.
..
我常常听到,在.NET 2.0的内存模型,写始终使用的释放栅栏。这是真的?这是否意味着,即使没有明确的内存屏障或锁定,就不可能观察到部分构造的对象的线程从它创建一个不同的(只考虑引用类型)?我显然不计的情况下构造漏这引用。 例如,假设我们有不可改变的引用类型: 公共类Person { 公共字符串名称{;私定; } 公众诠释年龄{获得;私定; } 公众人物(字符串名称,
..
因此,这是问题的肉:可FOO.BAR以往任何时候都返回null?为了澄清,可以'_bar'被设置为空后,它评为非空之前它的返回值? 公共类Foo { 对象_bar; 公共对象吧 { {返回_bar?新的对象(); } 集合{_bar =价值; } } } 我
..
类股{ 私人只读字符串名称; 私人只读双刻度; 公开组(字符串名称,双刻度){ this.name =名称; this.scale =规模, } 公共字符串名称{{返回名称; }} 公共字符串规模{{返回规模; }} 私有静态单位克=新的单位(“克”,1.0); 公共单位克{{返回克; }} }
..
的文档 ConcurrentDictionary 不明确的,所以我想我们不能指望代表的 valueFactory 和 updateValueFactory 的有自己的执行sinchronized(从GetOrAdd()和AddOrUpdate分别为()操作的) 所以,我认为我们无法实现使用它们内部资源,这需要,而无需手动实现我们自己的并发控制,也许只是使用并发控制的 [MethodImpl(Me
..
在兴奋爆炸在学习如何使线程安全调用Windows窗体控件,它让我想... 为什么不的所有的调用Windows窗体控件是线程安全的?任何人都可以解释为什么?我认为这将减少很多困惑这些控件的用户。 解决方案 这里的问题不是线程安全的。这些方法都是“线程安全的”,因为它们不会破坏应用程序的多线程同时调用时的状态 - 它只是线程安全的,包括抛出一个错误的线程异常(不记得它叫什么) 什么他们所得到的
..
让我们只说你有一个简单的操作是在后台线程中运行。你想提供一种方式来取消该操作,所以你创建你的取消按钮单击事件处理程序设置为true布尔标志。 私人布尔_cancelled; 私人无效CancelButton_Click(对象发件人ClickEventArgs五) { _cancelled = TRUE; } 现在你设置的GUI线程取消标志,但你从后台线程读取它。您是否需要访问布
..