从两个不同的线程发送TCP消息

时间:2010-12-21 15:30:27

标签: android design-patterns tcp

我有两个线程需要使用相同的已建立的连接发送TCP消息。我有一个对象让我说tcpSender我想从booth线程使用。如何设计我的软件以便不会出现并发问题和丢失的消息?

谢谢!

3 个答案:

答案 0 :(得分:2)

您可以在每次发送前Semaphore创建一个acquire,并在每次发送后创建release。这将确保一次一个线程访问资源。

答案 1 :(得分:2)

您可以将其建模为生产者/使用者,其中每个线程在准备就绪时将消息注入TCPSender并且TCPSender维护FIFO的队列消息。队列中的插入将被锁定(在TCPSender内)并按顺序处理。

每次从队列中删除消息时,如果队列不为空,则会有另一个消耗消息的线程。

两个直接的好处是你可以支持任意数量的生成器,并且阻塞仅限于插入队列而不是实际发送消息(从生产者的角度来看,即)。

答案 2 :(得分:1)

如果您在发送此数据后无需获得答案,则可以使用队列。