socket编程,udp打洞,如何避免多线程接收数据(特定线程接收特定数据)

socket编程,udp打洞,如何处理多线程接收数据(特定线程接收特定数据)
如题,使用UDP打洞,需要使用心跳包来保持NAT映射。如果使用多线程的话,比如接收工作数据一个线程,心跳一个线程,那么双线程如何能区分地接受数据。比如,心跳想接收心跳包,却收到了工作数据包,或者工作线程收到了心跳包导致心跳线程收不到心跳。怎么办?
求解

------解决方案--------------------
引用:
这个问题没人回答,我自己回答。昨晚想了下,觉得我自己把问题搞复杂了,不需要工作线程和心跳线程并行运行。心跳是为了保持NAT的映射表的,传输数据的时候不需要发送心跳,而等无数据传输,空闲的时候,把心跳开上就行了。可以是一个串行的关系。

现在网络框架设计都是基于单线程的了,然后通过消息队列的方式进行任务调度。可参考chrome源码
------解决方案--------------------
没有耗时的操作的话,没必要开2个线程,如果有,可以用一个主线程全部接受下来,再根据类型分配到指定线程。