http://www.360doc.com/content/10/1008/23/3700464_59462698.shtml
http://weihe6666.iteye.com/blog/1170141
http://tower.iteye.com/blog/309294
1 wait线程中应用while,将pthread_cond_wait包裹
2 pthread_cond_t的destroy需要在没有被wait时调用,这就要求wait线程需要被某个线程(比如主线程)join,然后在join后(回收完wait线程)进行pthread_cond_destroy
3
pthread_mutex_lock
pthread_cond_wait
pthread_mutex_unlock
调用wait时会将pthread_mutext_t unlock(比如在wait函数的第一行),然后进入阻塞状态
被signal唤醒后会从阻塞处开始执行,执行完后会将pthread_mutex_t lock(比如在wait return的时候)
所以在pthread_cond_wait至pthread_mutex_unlock之间pthread_mutex_t是lock状态
4 wait线程可能被某线程(比如主线程)pthread_cancel终止,如果终止发生在wait线程的pthread_cond_wait和pthread_mutex_unlock这间,则由于pthread_cond_wait调用完后pthread_mutex_t处于lock状态,则wait线程的终止会造成signal线程无法获得pthread_mutex_t而失效。所以为了避免这种情况,最好在wait线程中加上pthread_cleanup_push和pthread_cleanup_pop,并在push的handle函数中pthread_mutex_unlock wait线程和signal共用的pthread_mutex_t