我在解决这个问题时遇到了问题。
我有两个线程,一个执行如下(T1a,T1b,T1c) 第二个(T2a,T2b,T2c)
假设T1a应该在T2a之前启动,T1和T2在两台远程机器上并且需要网络通信(TCP套接字)。
如何在这两个线程之间建立同步(假设每个线程都有一个函数T1()和T2()),并且连续执行是平凡的,T1a< T2a< T1b< T2b< T1c< T2c
答案 0 :(得分:0)
这是一个技巧问题吗?看起来像是自70年代以来在gazillion守护程序中找到的基本命令循环的特定情况。
您必须让每个子任务向远程计算机发送消息(通过UDP套接字或任何其他通信方式),以便让下一个任务开始。
每个"功能" (Txy)将具有类似
的结构wait for a message signalling previous task completion
do my job
send another message to signal task completion
您实际上并不需要编写3个函数。分析消息并采取适当措施的单一功能将更易于维护和更强大:
forever
wait for a command
execute the corresponding action
possibly send a new message to trigger an action on peer side
最好为消息接收添加超时,以防止系统崩溃或连接中断时系统卡住。 跟踪下一个预期的命令以确保操作按预期顺序执行也是明智的:如果其中一个同步消息丢失会发生什么?
但是,我没有看到同步任务之间没有相互依赖关系的重点。
通常,当给定任务需要来自前一个任务的输入时,您只需要这样做。例如,从Internet获取一些数据并将其传递给其他计算机进行处理。
换句话说,消息通常包含执行下一部分处理所需的一些数据。