【发布时间】:2014-10-23 19:36:21
【问题描述】:
我有一个具有用户界面的程序。
当用户按下按钮时,程序会加载一些数据,这需要一分钟左右,所以界面自然会更新失败。
所以,我正在执行以下操作 - 我有一个名为“hasLoaded”的布尔变量,加载代码(在它自己的线程上工作)将在完成后设置为 true。界面会时常检查并停止显示“正在加载”屏幕。
问题是 - 由于这是一个共享变量,您可能想要锁定它(或使用读取器/写入器苗条锁或其他东西)。锁显然只是在共享变量(“hasLoaded”)周围。但是因为:
- 只有一个阅读器
- 作家只有一位
- 如果接口读取“错误”值没关系,因为它会在几分之一秒内再次检查
我还需要锁吗?澄清一下 - 如果两个线程同时尝试读取它,是否会发生任何“数据损坏”警告或其他问题,或者可能发生的“最糟糕”的事情是它读取一次错误的值并选择它下一轮正确吗?
【问题讨论】:
-
锁会阻止对跨线程共享的资源的并发操作。您认为可能需要锁定的线程之间共享哪些资源?
-
变量本身。对不起,我以为我说清楚了。我会很快审查我的问题
-
只需使用 BackgroundWorker 并等待它触发 RunWorkerCompleted 事件
标签: c# concurrency locking