以下是问题,
我有一个侦听线程,它侦听并接受新的连接。 接受后,我使用eventfd将套接字描述符传递给其他四个工作线程。 侦听器是创建一个eventfd的那个,所有工作线程读取相同的内容。
现在的问题是,当多个客户机连接到服务器时,服务器侦听器接受这些连接,并写入eventfd,其中一个工作线程接收两个不同套接字的总和。 例如,如果在插座10和11上接受两个连接,则工作人员中的一个接收21。
现在,它可能是通过设计,然而,这对我来说没有意义,为什么写不是队列,而不是添加。
请纠正我如果错了,也让我知道如果有人想看示例代码。
你做这项工作用错了工具。 EventFd()
是一个发生了什么事的通知工具,而不是发生了什么事; 这是相关的数据工具。
当您向eventfd写入一个新的64位整数值时,它将被添加到与事件相关联的当前数字中。 从描述符读取会给出当前的数字并将其重置为0(假设您没有使用信号量模式)。 所以如果你写了两遍,然后才读,你就会得到你描述的行为。
您应该使用队列或其他机制将套接字描述符传递给线程。