gpt4 book ai didi

c# - C# 中线程的处理(死锁)

转载 作者:行者123 更新时间:2023-12-03 12:49:12 33 4
gpt4 key购买 nike

我在 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;

bool 值 streamClosedopEnded 通过引用(使用 ref 关键字)从线程 A 传递到线程 B

线程A,启动线程B后,执行以下操作:

streamClosed = true;
while(!opEnded)
{
System.Threading.Thread.Sleep(1000); //wait
}

线程B停止工作。但在某些情况下,似乎陷入了僵局,自从我从 Windows 中的事件管理器中杀死它以来,它仍然被阻止。

出了什么问题?

最佳答案

opEnded 定义为 volatile

它可能正在被缓存(由编译器/优化器)。


但这对于更深层次的错误代码来说是一个快速且最小的修复。

真实代码不应该Sleep()。有很多更好的方法可以使线程彼此同步。使用哪一种很大程度上取决于您实际想要做什么。你不应该actually use volatile

关于c# - C# 中线程的处理(死锁),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22039257/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com