挂起线程在锁()没有DEADLOCK

时间:2013-08-27 11:26:11

标签: multithreading c#-4.0

一方面,我想用' Lock()'来锁定一些关键部分,但另一方面我想让某个按钮的点击暂停一个线程的可能性(我知道不应该使用'暂停'功能,但我别无选择。)

可能其他线程想要进入这个关键部分。 如何防止DEADLOCK?

如果'暂停'函数抛出异常(比如' Abort()'函数),没有问题。 显示器最终在'中被释放。声明......

例如:

static List<Thread> threadList = new List<Thread>();
public static List<Thread> ThreadList
{
    get { lock (_locker) { return SaveLists.threadList; } }
    set { lock (_locker) { SaveLists.threadList = value; } }
}

如果我暂停了锁定对象的线程,并且在另一个线程之后需要设置/获取list =&gt; DEADLOCK。

1 个答案:

答案 0 :(得分:1)

事实证明,解决方案太简单了! 我很惊讶自己以前没有想过......

负责tosuspend其他线程的线程应首先锁定临界区,从而有效地确保其他线程不在内。

我知道我不应该使用'暂停'功能,但我被要求使用它,我别无选择。

太糟糕了,不是得到适当的回应,我的分数减少了,答案如下:“你必须永远不要使用这个功能”,尽管我写道我必须使用它,尽管涉及的危险,我知道一般情况下禁止使用它。

我很失望,我认为他不适合论坛。