2015-06-16 114 views
3

我有一个线程在循环中调用recvfrom,超时时间为100毫秒。 另一个线程定期调用sendtoC函数recvfrom和sendto是否互斥?

sendto函数是否等待,直到recvfrom由超时释放(或成功读取)或在该时间段内发送数据。

+0

您的测试显示了什么? –

+0

那么,我的程序按预期工作,但我试图确定随着竞态条件的收紧,错误是否会蔓延。 – Pepedou

回答

3

C函数recvfrom和sendto是否互斥?

不可以。它们都可以同时由不同的线程执行。

sendto()不等待recvfrom()读取数据。它会将数据放入套接字的缓冲区并返回。多个sendto()可能会阻止先前的sendto()完成。如果在发送过程中发生任何错误(缓冲区已满,消息太大等),则可以检查检查errno以检查失败的原因。基本上,您不需要在两个线程的调用sendto()recvfrom()之间进行任何同步;他们是原子操作。

1

不,它不会等待,(至少,它不会等到获得线程安全访问通信栈所需的时间)。