当前位置: 技术问答>linux和unix
select如何实现发送的阻塞和解除阻塞?
来源: 互联网 发布时间:2015-11-07
本文导语: 实现一个通讯通用类,用TCP协议,在线程中进行数据收发。 我想用Select阻塞线程监视是否有数据需要接收或者发送,接收很容易用Select实现就不说了,我想实现发数据的时候,在主线程把数据填充到发送缓冲区上,...
实现一个通讯通用类,用TCP协议,在线程中进行数据收发。
我想用Select阻塞线程监视是否有数据需要接收或者发送,接收很容易用Select实现就不说了,我想实现发数据的时候,在主线程把数据填充到发送缓冲区上,然后通知通讯线程的Select已经有数据需要发送。这时候,通讯线程可以解除阻塞,发送缓冲区的数据。
我想问的是,select如何实现发送的阻塞和解除阻塞?
我想用Select阻塞线程监视是否有数据需要接收或者发送,接收很容易用Select实现就不说了,我想实现发数据的时候,在主线程把数据填充到发送缓冲区上,然后通知通讯线程的Select已经有数据需要发送。这时候,通讯线程可以解除阻塞,发送缓冲区的数据。
我想问的是,select如何实现发送的阻塞和解除阻塞?
|
用pipe作为同步机制。当主线程准备好发送缓冲区时,往pipe里写一个信息,子线程select在此pipe上等待读。一旦该pipe可读,则读出信息,然后处理缓冲区即可。
注意pipe只能阻塞读,不能阻塞写。
注意pipe只能阻塞读,不能阻塞写。