保持两个线程之间的同步布尔值 [英] Keeping boolean values in sync between two threads

查看:155
本文介绍了保持两个线程之间的同步布尔值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在一个线程(线程2)我已经改变的值,例如

In one thread (thread2) I have changed a value e.g.

CheckSuccess = false;

现在主线程?(线程1 - GUI /表)不皮卡的变化,怎么会是可能的propogate的所有线程身边的变化

Now the main thread (thread1 - GUI / Form) does not pickup the change, how would it be possible to "propogate" the changes around all threads?

我下的是IM pression的线程应该处理数据,而不是在单独的情况下工作(除非告知这样做)

I was under the impression that threads should manipulate the data, not work on seperate instances (unless told to do so)

推荐答案

这似乎是一个竞争条件。为了避免这种情况,你应该同步的访问共享变量。

It seems like a Race Condition. To avoid this you should synchronize an access to the shared variables.

  • If CheckSuccess is a field - try out marking it by volatile keyword.
  • If CheckSuccess is a property (which will be translated to a method call) you can use lock() statement:

private static readonly object stateLock = new object();
lock (stateLock)
{
    // access a shared variable here
    CheckSuccess  = false;
}

  • 如果 CheckSuccess 是UI控件的属性,你想从工作线程改变它 - 你应该使用特殊的技术,从工人到推送UI线程,这取决于哪个框架您正在使用WPF中的WinForms。

  • If CheckSuccess is a property of UI control and you want changing it from a worker thread - you should use special techniques to push changes from a worker to the UI thread, it depends on which framework you are using WinForms of WPF.

    • WinForms - How to update GUI from another thread in C#?
    • WPF - Update WPF controls at run time

    PS: 此外,如果你有编写多线程读取一个值,线程数(基本上比写作阅读更多的时候),你可能会发现有用的 ReaderWriterLock

    PS: Also if you have multiple threads reading a value and few threads writing (basically reads more often than writing) you may find useful ReaderWriterLock

    这篇关于保持两个线程之间的同步布尔值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆