多线程Microsoft文档代码示例在我的计算机上不返回相同的输出



我尝试运行这里的"示例"部分,但输出与文档所指出的不一样。

这是我的输出

Main thread: Start a second thread.
Main thread: Do some work.
Main thread: Do some work.
Main thread: Do some work.
Main thread: Do some work.
Main thread: Call Join(), to wait until ThreadProc ends.
ThreadProc: 0
ThreadProc: 1
ThreadProc: 2
ThreadProc: 3
ThreadProc: 4
ThreadProc: 5
ThreadProc: 6
ThreadProc: 7
ThreadProc: 8
ThreadProc: 9
Main thread: ThreadProc.Join has returned.  Press Enter to end program.

将此输出与MS给出的输出进行比较,您可以看到两个线程的输出不像MS文档中那样扭曲。乍一看,我认为这是CPU的问题,因为我在M1苹果芯片上执行了它,但在我尝试在x64英特尔六处理器上执行后,结果是一样的,我不明白为什么两个线程输出没有扭曲。

提前谢谢你

多线程代码具有固有的不确定顺序,除非特别同步。这个示例可能非常老,并且是在考虑单核CPU的情况下编写的。在任何现代CPU上,您可能总是有一些CPU内核可用,因此yield几乎没有影响。

如果你运行的东西消耗了100%的CPU,你应该强制调度程序在线程之间切换,当一个线程产生时,你可能会看到一些其他的排序。

我不建议使用这个例子,现代代码在大多数情况下应该更喜欢使用Task而不是Thread

相关内容