花了一天测试明白了两个事情

1. pthread_cond_wait/pthread_cond_timedwait两个函数,只要之前mutex是正常lock住了,当他们返回的时候,会保证mutex被当前thread获得。无论正常返回还是错误返回。

所以之前写多线程的时候,用到了cond等数据,之后用cancel线程时,会出现只cancel到一个线程的情况。其实是第一个线程被cancel了,被cancel时正在pthread_cond_wait中阻塞,然后从函数中返回,获得了mutex,然后线程结束,但是mutex没有释放,导致其他线程无法获得mutex,于是就一直阻塞。

另外,如果使用pthread_cond_timedwait,如果超时之后mutex被别的线程占用无法获得,那么实际函数返回时可能经过的时间不止设定的时间。

2. udp发送时没有buff的,直接到ip层的buff;但是接收是有fifo的buff的,当socket fd被关闭时,这个recv buff也会被销毁。但是由于udp无连接,会存在这么一种情况:client从port1发出数据,还没收到回包的时候就close掉socket,然后再次创建socket,并且绑定port1,如果这是server回包,那么这个数据可以被收到。

你可能感兴趣的:(测试)