【问题标题】:More than just data communication between threads不仅仅是线程之间的数据通信
【发布时间】:2018-05-15 01:15:49
【问题描述】:

假设我有 3 个线程。

第一个线程是我创建线程的控制器 第 2 和第 3 是完成数据处理的地方

关键是,第二个线程与第三个线程执行不同的操作。所以我需要一种方法来区分这两种不同的逻辑。只用不同的方法创建线程就足够了吗?

不!那是因为如果线程 2 死了,变得没有响应,我需要第三个来代替它并开始做第二个线程正在做的工作,并创建一个新的作为第三个,但创建一个新的作为第三个是不是我的问题。

正如我所说,如何突然让第三个线程开始执行第二个逻辑而不为之前的第二个线程启动一个全新的线程并重置它的变量

例如线程 2 死了,线程 3 现在需要开始执行线程 2 的工作,我需要创建一个新线程来覆盖线程 3。


注意:额外的问题是我如何在不丢失线程 2 的情况下做到这一点,以便在它停止无响应的情况下我仍然可以重新使用它?

任何帮助表示赞赏!

【问题讨论】:

  • 在任何保存数据的结构中,使用任何线程都可以用来运行大小写切换的枚举。然后所有线程都可以运行相同的代码,您可以通过适当地设置枚举来控制操作的顺序,以指示下一个线程运行所需的操作。
  • 哦 - 如果线程 2 的问题是错误,请修复它!

标签: c linux multithreading pthreads mutex


【解决方案1】:

您为这项工作选择了错误的工具。如果您需要处理即将死亡或无响应的任务,则必须将它们与进程隔离,而不是线程。

线程共享一个执行环境。因此,如果一个线程破坏或破坏了该执行环境,它可能会影响所有其他线程。例如,假设您的线程在调整共享结构的过程中死亡。如果您保持对这些共享结构的锁定,则没有其他线程可以访问它们。如果您释放锁,其他线程可能会访问它们并发现它们处于损坏状态。

为这种隔离使用多个进程。

【讨论】:

  • 不能保证使用进程而不是线程来解决 OP 的问题 - OP 不知道或解释“线程 2”的问题,因此使用进程可能无济于事。
  • 我当时可能不清楚,抱歉。每个线程所做的是打开一个套接字并像一个“服务器”一样接收一些命令并在数据之上执行它。第三个线程应该是备份“服务器”,它模仿复制第二个线程在数据的单独副本上所做的一切,作为故障安全。但万一这些线程中的任何一个退出,我需要重新启动它们。并且应该例如第二个线程(主“服务器”)退出/死亡第三个线程现在需要作为新的主“服务器”执行。
  • @FelipeHeliszkowski 为什么当还有有用的工作要做时线程会退出或死亡?这听起来像是一个错误。
  • 是与否,我试图保护它免受意外错误的影响,以便应用程序的其余部分不会中断。如果其中一个线程发生问题,应用程序不应中断,因为一个线程失败并以代码 -1 退出,但修复需要修复的内容(例如,使一个线程表现得像死去的线程并为旧线程创建一个新线程工作)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多