【发布时间】:2015-02-15 23:04:54
【问题描述】:
当数据准备好通过 recv() 读取或信号量 S 发出信号时,我有一个必须解除阻塞的线程。
有什么办法吗?
【问题讨论】:
标签: multithreading sockets posix semaphore
当数据准备好通过 recv() 读取或信号量 S 发出信号时,我有一个必须解除阻塞的线程。
有什么办法吗?
【问题讨论】:
标签: multithreading sockets posix semaphore
您可以用 futex 替换 POSIX 信号量,并在套接字和 futex 上选择/轮询。
【讨论】:
我对这个问题的解决方案是使用一对套接字而不是信号量。特别是,您可以调用 socketpair() 来获取一对已连接的套接字;将一个套接字提供给线程 A,将另一个套接字提供给线程 B,然后任何一个线程都可以通过在其套接字上发送一个字节来唤醒另一个线程(在 select()/poll()/etc 内阻塞)。
【讨论】: