线程程序中奇怪的执行顺序

本文关键字:执行 顺序 程序 线程 | 更新日期: 2023-09-27 18:13:19

我试图通过下面的代码执行一个管理器作为线程。奇怪的是,当我一步一步地调试代码时,似乎Stop()方法在管理器中的Start()方法之前被调用

MyManager manager = new MyManager();
Thread thread = new Thread(manager.Start);
thread.Start();
while (Directory.GetFiles(pathToFiles).Length < 5)
  Thread.Sleep(1000);
manager.Stop();
thread.Join();

这比那更奇怪!有时的执行顺序是应该的。然后,好像有什么东西阻塞了理智,首先击中Stop()方法中的断点,然后击中Start()方法中的断点

我怀疑是更复杂的东西,因为有时,程序在执行时甚至没有碰到断点(我以完全相同的方式执行)!

不是线程开发的专家,我需要知道如何解决这个问题。

线程程序中奇怪的执行顺序

这是一个竞争条件。一个线程竞相调用Start,另一个线程竞相调用Stop。其中一个先到达目标。有道理吗?

如果您希望首先调用Start,那么依次调用它们:

Start();
...
Stop();