如何在recv()和sem_wait()上同时等待?

问题描述 投票:1回答:3

我有一个线程,当数据准备好通过recv()读取或信号量S发出信号时,必须解除阻塞。

这有什么办法吗?

multithreading sockets posix semaphore
3个回答
1
投票

由于在posix中没有像WaitForMultipleObjects()这样的锁,所以你只有有限的选择。

A.使用select(2)并收到有关套接字更改事件的通知

B.或poll(2)并通知文件描述符事件

或C.使用像libevent这样的库实现


1
投票

您可以用futex替换POSIX信号量,并在套接字和futex上选择/ poll。


0
投票

我对这个问题的解决方案是使用一对套接字而不是信号量。特别是,您可以调用socketpair()来获取一对连接的套接字;将其中一个套接字提供给线程A,将另一个套接字提供给线程B,然后任一线程都可以通过在其套接字上发送一个字节来唤醒另一个线程(阻塞select(/ / poll()/ etc)。

© www.soinside.com 2019 - 2024. All rights reserved.