2016-01-24 73 views
0

什么是与所有线程的数据共享流的最佳方式? 如果我有一个线程与每个用户连接交互,然后每个用户输入必须可用于所有线程。我们可以想像一个简单的聊天,每个人都可以看到每个人的消息。pthread和有点“广播流”

所以我虽然我可以使用某种“共享流”,我可以使用某种select()之间的这个流和用户输入套接字,写在那里,当我有一个输入,并从那里读取时是可用的新东西。我虽然关于有一些共享套接字,但它不会这样工作,因为当第一个线程将从套接字读取数据时,它不会再用于其他线程。

那么它是最好的和惯用的方式来实现这一目标?

+1

对于IPC而言,使用'select()'对内部通信非常有用。在内部,具有关联事件的共享队列将是更好的方式,但也应该考虑写入每个线程的单个队列的多路复用器。你想要什么? –

+0

你的意思是每个线程都检查一个队列并接收他以前没有收到的最后一个数据,它应该跟踪它已经获得什么和没有收到什么? – coredump

+1

是的,这是一个分类“生产者 - 消费者情景”,只需搜索网络。 –

回答

0

我认为你可能会把这里的工程设计得太过分了.. 你在找什么是SMP like thisthis某种,而不是流。 “流”的概念可以由一个不同的流程来处理(一个管理者流程,如果你愿意的话),它可以处理流入的信息流。在你描述的聊天场景中,这不是坏事,因为每个线程都可以在SMP上添加任何接收到的输入流。