linux-进程之间的1对多通信

linux-进程之间的1对多通信,linux,ipc,Linux,Ipc,我试图找到一种在Linux中进程之间进行1对多通信的方法。我发现linux有命名管道,但这些管道不能与多个读卡器一起工作(我在其他SO答案中发现,一旦一个读卡器读取了一些数据,其他人就无法获取);有人能澄清一下这一点吗?我看到的答案有好有坏,不管是否可能 另外,据我所知,使用sockets,多个客户端可以连接到服务器,但在我的情况下,我需要一个进程将数据发送到多个进程(有点相反),就像广播一样 有人能建议有哪些选择吗 编辑:如何使用共享内存 命名管道实际上就像一个管道,即。E它们有一个输入和一个

我试图找到一种在Linux中进程之间进行1对多通信的方法。我发现linux有
命名管道
,但这些管道不能与多个读卡器一起工作(我在其他SO答案中发现,一旦一个读卡器读取了一些数据,其他人就无法获取);有人能澄清一下这一点吗?我看到的答案有好有坏,不管是否可能

另外,据我所知,使用
sockets
,多个客户端可以连接到服务器,但在我的情况下,我需要一个进程将数据发送到多个进程(有点相反),就像广播一样

有人能建议有哪些选择吗


编辑:如何使用共享内存

命名管道实际上就像一个管道,即。E它们有一个输入和一个输出。因此,不能使用单个(命名)管道向多个其他进程发送信息

但是,使用一个管道来处理另一个过程并用相同的信息填充所有管道的想法并不反对。当使用命名管道、未命名管道和套接字时,这将起作用。但在任何情况下,这都意味着发送者跟踪所有接收者,并将信息分别发送给每个接收者


如果你想让发送者不知道接收者列表的信息,那么我现在能想到的唯一方法就是使用普通文件。发送方可以写入,接收方都可以读取。

您可以使用具有读写信号量的共享内存,将数据从一个进程交换到多个进程。读写信号量可用于在进程之间同步数据

下面是同步一个writer线程和20个reader线程之间通信的伪代码。写入被阻止,直到所有读卡器线程读取共享内存

if it is a writer thread
{
    Take read-write mutex lock
    increment writers++;
    Release read-write mutex lock

    Sem wait for the node-is-empty
    Access the shared memory and fill the empty node

    Take read-write mutext lock
    Decrement writers--; 
    Release read-write mutex lock

    Sem post for the node-is-filled
}
else /* want to read */
{
    Take read-write mutex lock
    if (writers > 0 || readers == 20) //reader default value is 20 reader threads
    {
        Release read-write mutex lock
        sem wait for the node-is-filled
        Take read-write mutex lock
    }

    Release read write mutex lock

    printf("Shared Memory: %d\n", memory);

    Take read-write mutex lock
    readers--;
    if (readers == 0) //wait for all the threads to read the buffer
        sem post for the node-is-empty
    Release read-write mutex lock
}

你看过吗?Is是一个消息传递接口,可用于不同进程之间的通信。共享内存可以如何使用?@Jake是的,你可以将数据放入shm段,但你仍然需要一种方法来通知所有读者,那里有一些东西要读,这意味着信号、套接字、管道或其他东西。如果通信是单向的,并且数据量不大,那么shm就没有多大的优势。