通过C套接字进行线程同步

时间:2015-09-06 13:54:45

标签: c multithreading sockets synchronisation

我在解决这个问题时遇到了问题。

我有两个线程,一个执行如下(T1a,T1b,T1c) 第二个(T2a,T2b,T2c)

假设T1a应该在T2a之前启动,T1和T2在两台远程机器上并且需要网络通信(TCP套接字)。

如何在这两个线程之间建立同步(假设每个线程都有一个函数T1()和T2()),并且连续执行是平凡的,T1a< T2a< T1b< T2b< T1c< T2c

1 个答案:

答案 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获取一些数据并将其传递给其他计算机进行处理。

换句话说,消息通常包含执行下一部分处理所需的一些数据。