C Linux套接字进行进程间通信,如何处理互斥?

C Linux sockets for interprocess communication, how to handle mutual exclusion?

提问人:Miguel Perez Avila 提问时间:11/15/2023 更新时间:11/15/2023 访问量:39

问:

我有一个 Linux 主机系统,其中我有不同的进程,通过 unix 套接字将信息发送到另一个进程。这个想法是使用一个套接字来接收该过程其余部分的所有数据。但是我读到套接字不是安全线程,我不知道如何使用不同的过程来保持互斥。

谁能给我一个提示?

C Linux 套接字进程 互斥

评论

5赞 Armali 11/15/2023
你在哪里读到套接字不是安全螺纹的?
1赞 Jeremy Friesner 11/15/2023
最简单(我认为也是最好的)方法是不要在线程(或进程)之间共享套接字文件描述符。相反,设置一个连接,并确保连接两端的套接字正好由一个线程处理,该线程可以安全地使用它与连接另一端固定套接字的一个线程进行通信。
1赞 Steffen Ullrich 11/15/2023
除了套接字是线程安全的......UNIX 域套接字有两种类型:数据报套接字和流套接字。使用数据报,每个数据报将向对等方发送一条消息,这将是原子的,即同时发送的两个数据报不会以某种方式重叠。使用流套接字时,发送方的每个连接都会在对等方上产生不同的连接,因此也内置了明确的分离。send
1赞 Jeremy Friesner 11/15/2023
多个线程访问同一个套接字文件描述符的主要问题不是套接字本身,而是跨套接字移动的数据;在这种情况下,来自不同线程的数据很容易混淆,因此难以解释。
1赞 Craig Estey 11/16/2023
如果您尝试通过 unix 域套接字与同一系统上的进程(和/或线程)进行通信,我发现 SysV IPC() 可以更灵活。您可以对所有线程使用一个消息队列(而不是需要单独的套接字来连接任何两个给定进程之间的通信)。它们适用于多个生产者/多个使用者场景。msgsnd/msgrcv

答: 暂无答案