相关疑难解决方法(0)

为什么"锁定(typeof(MyType))"有问题?

MSDN 在C#中给出了关于lock关键字的以下警告:

通常,避免锁定公共类型或超出代码控制范围的实例.常见的构造锁(this),lock(typeof(MyType))和lock("myLock")违反了这个指南:

* lock (this) is a problem if the instance can be accessed publicly.
* lock (typeof (MyType)) is a problem if MyType is publicly accessible.
Run Code Online (Sandbox Code Playgroud)

然而,它没有为它提供任何可靠的推理.锁(这个)在这里解释了SO.我对lock(typeof(MyType))案件感兴趣.有什么危险吗?

谢谢.

c# multithreading locking

45
推荐指数
2
解决办法
1万
查看次数

使用lock(this)来说明死锁的示例代码

我读过几篇文章和帖子是说lock(this),lock(typeof(MyType)),lock("a string")都是不好的做法,因为另一个线程可以锁定相同的密钥和导致死锁.为了理解这个问题,我试图创建一些示例代码来说明死锁,但一直无法解决这个问题.

有人可以编写一个简洁的代码来说明这个经典问题吗?请保持简短,我只能在较小的块中消化代码.

编辑: 我认为lassevk总结得很好; 真正的问题是你失去了对锁的控制.一旦发生这种情况,您无法控制锁被调用的顺序,并且您允许潜在的死锁情况.

lock(this),lock(typeof(MyType))等所有的情况下,你选择了一个锁是无法控制的情况.

.net c# multithreading deadlock

29
推荐指数
2
解决办法
3万
查看次数

锁定字段或局部变量?

在我从Marc 的回答中读到这个问题之后....

我有时会看到人们锁定局部变量.

这段代码坏了吗?

public void Do()
{
 object  o  = new Object();
 lock (o)
     {
      ...
     }
}
Run Code Online (Sandbox Code Playgroud)

我认为object o = new Object();应该在方法之外作为一个Field.

由于每个线程都获得了一个新实例o,因此会有多个锁.

我在这里错过了什么?在这种特定情况下,它不应该锁定字段吗?

.net c# multithreading locking .net-4.0

9
推荐指数
2
解决办法
7791
查看次数

标签 统计

c# ×3

multithreading ×3

.net ×2

locking ×2

.net-4.0 ×1

deadlock ×1