gpt4 book ai didi

c# - 等待 System.Threading.Thread 完成的 Microsoft 片段

转载 作者:行者123 更新时间:2023-11-30 21:01:16 25 4
gpt4 key购买 nike

我正在查看有关修饰符“volatile”的 Microsoft MSDN 引用页,并且有点不确定他们提供的代码片段等待线程完成执行的方式。

我知道这只是示例代码,线程很快完成,但我相信下面的代码对于试图理解线程的开发人员来说不是很好。

我相信微软实际上已经提供了一个代码片段,它将在代码中引入一个“紧密循环”。现在我明白它不会影响这个代码片段(那么多),但是如果开发人员使用这个代码并尝试将它用于一些更密集的多线程代码,我会假设“紧密循环”会出现问题吗?

using System;
using System.Threading;
class Test
{
public static int result;
public static volatile bool finished;
static void Thread2() {
result = 143;
finished = true;
}
static void Main() {
finished = false;
// Run Thread2() in a new thread
new Thread(new ThreadStart(Thread2)).Start();
// Wait for Thread2 to signal that it has a result by setting
// finished to true.
for (;;) {
if (finished) {
Console.WriteLine("result = {0}", result);
return;
}
}
}
}

片段引用: http://msdn.microsoft.com/en-gb/library/aa645755(v=vs.71).aspx

在上面的示例中,等待线程完成的更好方法是什么,它不会引入这种“紧循环”情况?

或者,实际上根本不会引入“紧环”吗?

请注意,该代码段的目的是演示“volatile”关键字,因此我认为使用 Thread.Join() 会使该代码段脱离上下文。

最佳答案

这个片段没有说明如何等待,这只是说明从不同线程访问 volatile 字段。

要简单地等待你的后台线程,你可以使用这个片段:

AutoResetEvent autoEvent = new AutoResetEvent(false);
ThreadPool.QueueUserWorkItem((o) =>
{
// do your stuff
((AutoResetEvent)o).Set();
}, autoEvent);
autoEvent.WaitOne();

关于c# - 等待 System.Threading.Thread 完成的 Microsoft 片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14334153/

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