Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在终止处于阻塞状态的线程_C#_.net_Multithreading_Windows Phone 7_Locking - Fatal编程技术网

C# 正在终止处于阻塞状态的线程

C# 正在终止处于阻塞状态的线程,c#,.net,multithreading,windows-phone-7,locking,C#,.net,Multithreading,Windows Phone 7,Locking,我有一个线程,它会在某个锁上阻塞自己。现在出于某种条件,我想在c#中终止该线程。 但问题是,在thread.abort中,并不能保证它会终止线程。如果您真的想保证线程死亡,最好的选择是启动一个新进程 有一个优秀的线程讨论了thread.abort的许多可能陷阱。如果您真的想保证线程死亡,最好的选择是启动一个新进程 有一个优秀的线程讨论了thread.abort的许多可能陷阱。假设您希望在线程遇到死锁时以确定的方式终止该线程。正确的? 是的,线程中止并不保证终止,但使用thread.abort几乎

我有一个线程,它会在某个锁上阻塞自己。现在出于某种条件,我想在c#中终止该线程。
但问题是,在thread.abort中,并不能保证它会终止线程。

如果您真的想保证线程死亡,最好的选择是启动一个新进程


有一个优秀的线程讨论了thread.abort的许多可能陷阱。

如果您真的想保证线程死亡,最好的选择是启动一个新进程


有一个优秀的线程讨论了thread.abort的许多可能陷阱。

假设您希望在线程遇到死锁时以确定的方式终止该线程。正确的? 是的,线程中止并不保证终止,但使用thread.abort几乎总是一个坏主意。 如果有一种方法可以立即终止线程,那么它可能会导致更大的问题。如果该线程已锁定某些资源,则处于某些未提交事务的中间,并且持有这些资源的线程突然被杀死,没有其他线程可以对这些资源工作。
我能给出的最佳建议是修复死锁问题,而不是掩盖它

假设您希望在线程遇到死锁时以确定的方式终止线程。正确的? 是的,线程中止并不保证终止,但使用thread.abort几乎总是一个坏主意。 如果有一种方法可以立即终止线程,那么它可能会导致更大的问题。如果该线程已锁定某些资源,则处于某些未提交事务的中间,并且持有这些资源的线程突然被杀死,没有其他线程可以对这些资源工作。

我能给出的最佳建议是修复死锁问题,而不是掩盖它

好的,那么,您想问一个问题吗?修复导致死锁的bug不是更好吗?您能解释一下线程为什么等待它吗?顺便说一句,在MSDN文档中有一个关于线程何时不会结束的非常明确的描述:许多人似乎认为这是关于死锁的,但我没有看到这样的证据(因此我的问题需要澄清)。什么锁?如果它是一个互斥锁类型的锁,你能把它改成一个信号量类型的锁吗,也就是说,可以从另一个线程发出信号的锁?好的,那么,你想问一个问题吗?修复导致死锁的错误不是更好吗?你能解释一下线程为什么等待它吗?顺便说一句,在MSDN文档中有一个关于线程何时不会结束的非常明确的描述:许多人似乎认为这是关于死锁的,但我没有看到这样的证据(因此我的问题需要澄清)。什么锁?如果它是互斥锁,你能把它改成信号量锁吗,也就是说,可以从另一个线程发出信号吗?我认为这句话是直接适用的:“我一直推荐的方法非常简单。具有对工作线程和UI线程都可见的易失性bool字段。如果用户单击“取消”,请设置此标志。同时,在工作线程上,不时测试标志。我同意大多数情况,除了OP指出线程在锁上基本上处于死锁状态,在这种情况下,它将无法检查标志的状态。您可以设置等待锁的最长时间,然后循环。类似于:
while(!getLock(waitMs)){If(取消)return false;}…
再次表示完全同意,但我怀疑在某些情况下线程可能会被永久锁定(我个人经历过OCR COM组件锁得比鼓还紧的痛苦经历)。@我完全接受了你的想法,也这么做了。thnx每个人我认为这句话都是直接适用的:我一直推荐的方法非常简单。具有对工作线程和UI线程都可见的易失性bool字段。如果用户单击“取消”,请设置此标志。同时,在工作线程上,不时测试标志。我同意大多数情况,除了OP指出线程在锁上基本上处于死锁状态,在这种情况下,它将无法检查标志的状态。您可以设置等待锁的最长时间,然后循环。类似于:
while(!getLock(waitMs)){If(取消)return false;}…
再次表示完全同意,但我怀疑在某些情况下线程可能会被永久锁定(我个人经历过OCR COM组件锁得比鼓还紧的痛苦经历)。@我完全接受了你的想法,也这么做了。谢谢大家