Skip to main content
 首页 » 编程设计

c#之如何正确使用锁具

2024年02月06日30dyllove98

我想知道如何锁定一个 bool 值,据我所知,它需要创建另一个“对象”并将其用于锁定机制......我的问题是我不明白这 block 代码:

lock (this.mLock) { this.end5 = true; } 

如果同时在代码中的其他地方/在另一种方法中,我正在 if 语句中读取该变量 (end5),那么实际上会做任何事情吗?

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

如果我错了,如果有人能向我解释这一点,我将不胜感激,但 IF 中的“读取”不会丝毫不关心 mLock 已被锁定,因此“读取”可能会在End5 正在设置,因此根本没有任何用处??如果是这样,我如何确保“读取”在读取之前等到 end5 被“释放”?

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

请您参考如下方法:

你没有看错。

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

但是您必须小心定义临界区的方式。如果您需要保证 end5 的值在整个 DO SOMETHING 过程中保持不变,那么它需要位于另一个临界区内。请确保不要造成任何死锁:)