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

Multithreading 如何同时在recv()和sem_wait()上等待?,multithreading,sockets,posix,semaphore,Multithreading,Sockets,Posix,Semaphore,我有一个线程,当数据准备好通过recv()读取时,或者当信号量S发出信号时,必须解除阻塞 有什么方法可以做到这一点吗?因为posix中没有类似于WaitForMultipleObjects()的锁,所以您只有有限的选项 A.使用插座更改事件并获得通知 B.或,并在文件描述符事件时得到通知 或者C.使用一些库实现,比如libevent我解决这个问题的方法是使用一对套接字而不是信号量。特别是,您可以调用socketpair()来获得一对连接的套接字;将一个套接字提供给线程A,将另一个套接字提供给线程

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


有什么方法可以做到这一点吗?

因为posix中没有类似于
WaitForMultipleObjects()
的锁,所以您只有有限的选项

A.使用插座更改事件并获得通知

B.或,并在文件描述符事件时得到通知


或者C.使用一些库实现,比如libevent

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