我想知道如何锁定一个布尔值,从我能阅读的内容中需要另一个"对象"要创建并用于锁定机制......我的问题是我不明白这段代码如何:
lock (this.mLock) { this.end5 = true; }
如果在同一时间,在代码/其他方法中的其他地方,实际上会做任何事情,我在if语句中对该变量(end5)进行读取吗?
if(this.end5==true)
DO SOMETHING;
如果有人能够向我解释这个问题,如果我错了,我会感激不尽,但是不会感到沮丧。 IF内部并不关心mLock是否被锁定,因此" Read"可能会在End5被设置时发生,因此根本没有用处?如果是这样的话,我该如何确保" Read"等到结束5是"发布"在阅读之前?
很抱歉,如果我感到困惑......谢谢。
答案 0 :(得分:2)
是的,您的解锁读取并不关心锁定。在阅读时锁定。它看起来像这样:
bool result;
lock (mLock)
result = end5;
if (result)
DoSomething();
也就是说,您可能希望扩展锁定区域以覆盖分支DoSomething
。取决于你想让代码成为原子的东西。
答案 1 :(得分:2)
你没错。
lock
限制访问关键部分。在您的示例中,您将end5
设置为关键部分...但不是读取它。所以锁定对你提出的要求没有帮助。你也想检查阅读方面的锁定。
但是你必须要小心如何定义关键部分。如果你需要保证{SOMETHING'中end5
的值保持不变,那么它需要在另一个关键部分内。请确保不要造成任何死锁:)