【问题标题】:How can I share resources with threads in C#?如何在 C# 中与线程共享资源?
【发布时间】:2015-04-14 01:35:57
【问题描述】:

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

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

我读过一些其他论坛,人们说中止或暂停线程是最糟糕的解决方案,我也读过线程同步但我真的不知道这在这种情况下是否有用,因为我从来没有用过。

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

【问题讨论】:

    标签: c# multithreading


    【解决方案1】:

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

    有一个很棒的资源,它既介绍了 .NET 中的线程概念,又以平易近人的方式讨论了高级概念

    http://www.albahari.com/threading/

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

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

    http://www.albahari.com/threading/part2.aspx#_Locking

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多