如何与C#中的线程共享资源?

如何与C#中的线程共享资源?,c#,multithreading,C#,Multithreading,我有一个线程从一个特定的plc的内存读取,它工作得很好。现在我想要的是启动另一个线程来测试系统的行为(模拟第一个线程),以防连接性问题,当一切正常时,继续第一个线程。但我想我会有问题,因为这两个线程将需要使用相同的端口 我的第一个想法是中止第一个线程,启动第二个线程,当一切正常时,中止这个线程并“重新启动”第一个线程 我读过其他一些论坛,有人说中止或挂起线程是最糟糕的解决方案,我也读过关于线程同步的文章,但我不知道这在这种情况下是否有用,因为我从未使用过它 我的问题是,解决这种情况的正确方法是什

我有一个线程从一个特定的plc的内存读取,它工作得很好。现在我想要的是启动另一个线程来测试系统的行为(模拟第一个线程),以防连接性问题,当一切正常时,继续第一个线程。但我想我会有问题,因为这两个线程将需要使用相同的端口

我的第一个想法是中止第一个线程,启动第二个线程,当一切正常时,中止这个线程并“重新启动”第一个线程

我读过其他一些论坛,有人说中止或挂起线程是最糟糕的解决方案,我也读过关于线程同步的文章,但我不知道这在这种情况下是否有用,因为我从未使用过它


我的问题是,解决这种情况的正确方法是什么?

您有一个需要协调线程访问的共享资源。NET中有许多机制可用于这种协调

有一个很棒的资源,它提供了对.NET中线程概念的介绍,并以一种可接近的方式讨论了高级概念

在您的情况下,请查看有关锁定的部分

独占锁定用于确保一次只能有一个线程进入特定的代码段。两种主要的独占锁定结构是锁和互斥锁。在这两种方法中,锁构造更快、更方便。不过,互斥锁有一个优势,它的锁可以跨计算机上不同进程的应用程序

您可以构造两个线程,以便它们必须获得特定的锁才能使用端口。让第一个线程在启动第二个线程之前释放该锁,然后让第一个线程等待再次获取该锁(第二个线程将保持该锁,直到完成)