如何正确使用锁

时间:2014-07-29 18:18:55

标签: c# locking

我想知道如何锁定一个布尔值,从我能阅读的内容中需要另一个"对象"要创建并用于锁定机制......我的问题是我不明白这段代码如何:

lock (this.mLock) { this.end5 = true; }
如果在同一时间,在代码/其他方法中的其他地方,

实际上会做任何事情,我在if语句中对该变量(end5)进行读取吗?

if(this.end5==true)
    DO SOMETHING;

如果有人能够向我解释这个问题,如果我错了,我会感激不尽,但是不会感到沮丧。 IF内部并不关心mLock是否被锁定,因此" Read"可能会在End5被设置时发生,因此根本没有用处?如果是这样的话,我该如何确保" Read"等到结束5是"发布"在阅读之前?

很抱歉,如果我感到困惑......谢谢。

2 个答案:

答案 0 :(得分:2)

是的,您的解锁读取并不关心锁定。在阅读时锁定。它看起来像这样:

bool result;
lock (mLock)
    result = end5;

if (result)
    DoSomething();

也就是说,您可能希望扩展锁定区域以覆盖分支DoSomething。取决于你想让代码成为原子的东西。

答案 1 :(得分:2)

你没错。

lock限制访问关键部分。在您的示例中,您将end5设置为关键部分...但不是读取它。所以锁定对你提出的要求没有帮助。你也想检查阅读方面的锁定。

但是你必须要小心如何定义关键部分。如果你需要保证{SOMETHING'中end5的值保持不变,那么它需要在另一个关键部分内。请确保不要造成任何死锁:)