glibc问题: pthread_cond_destroy 死锁
pthread_cond_wait 等相关函数底层是glibc用 futex实现的, 由于其实现的复杂性,可能引起死锁.
下面这段代码将引起 pthread_cond_destroy 死锁
inline Condition::Condition(int type) { if (type == SHARED) { pthread_condattr_t attr; pthread_condattr_init(&attr); pthread_condattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); pthread_cond_init(&mCond, &attr); pthread_condattr_destroy(&attr); } else { pthread_cond_init(&mCond, NULL); }}Condition 和 Mutex 都可以是 Shared. 所以如果一个在 condition waiting 的进程意外退出, 那个调用 destroy 的进程很容易被锁死.