【发布时间】:2014-02-26 10:58:40
【问题描述】:
我在 C# 应用程序中使用线程。我有以下情况:
线程 A,调用线程 B,使用以下代码:
ThreadStart t = () => StreamManager.ManageStream.mixThread(ref streamClosed, ref opEnded);
Thread threadB = new Thread(t);
threadB.Start();
线程 B 重复做这个工作:
while (!streamClosed)
{
System.Threading.Thread.Sleep(3000);
//some stuff here
}
opEnded = true;
布尔值 streamClosed 和 opEnded 通过引用从线程 A 传递到线程 B(使用 ref 关键字)
线程A,启动线程B后,进行如下操作:
streamClosed = true;
while(!opEnded)
{
System.Threading.Thread.Sleep(1000); //wait
}
线程 B 停止工作。但在某些情况下,似乎处于死锁状态,因为我从 Windows 中的活动管理器中将其杀死,所以一直处于阻塞状态。
怎么了?
【问题讨论】:
-
可以显示调用代码吗?
-
是的,我已经编辑了我的问题
-
您是否正在尝试实施合作取消?有更简单的方法可以实现这一点。
-
真正的线程,也传递一个队列 ConcurrentQueue
queue
标签: c# .net multithreading thread-safety