pthread_mutex_lock(&mutex); /**operation/ pthread_cond_signal(&cond) pthread_mutex_unlock(&mutex)
[quote=引用 7 楼 pengzhixi 的回复:] [quote=引用 6 楼 u011761982 的回复:] [quote=引用 5 楼 pengzhixi 的回复:] 第一 你的pthread_cond_wait不是通过放到信号处理函数里面来实现这个功能的。这里所说的pthread_cond_signle发出的信号,你更多的应该看成是操作系统发出的一个通知,通知因为等待条件变量而陷入阻塞的进程。这里不是传统的信号处理。估计你的问题是如果pthread_cond_signle发出了通知,但是还没释放锁,这个时候wait得不到锁从而再次陷入阻塞,直到pthread_cond_signle线程释放锁之后才会wait成功。所以一般的建议是先释放锁 然后pthread_cond_signle。这样效率会比较高。
[quote=引用 6 楼 u011761982 的回复:] [quote=引用 5 楼 pengzhixi 的回复:] 第一 你的pthread_cond_wait不是通过放到信号处理函数里面来实现这个功能的。这里所说的pthread_cond_signle发出的信号,你更多的应该看成是操作系统发出的一个通知,通知因为等待条件变量而陷入阻塞的进程。这里不是传统的信号处理。估计你的问题是如果pthread_cond_signle发出了通知,但是还没释放锁,这个时候wait得不到锁从而再次陷入阻塞,直到pthread_cond_signle线程释放锁之后才会wait成功。所以一般的建议是先释放锁 然后pthread_cond_signle。这样效率会比较高。
[quote=引用 5 楼 pengzhixi 的回复:] 第一 你的pthread_cond_wait不是通过放到信号处理函数里面来实现这个功能的。这里所说的pthread_cond_signle发出的信号,你更多的应该看成是操作系统发出的一个通知,通知因为等待条件变量而陷入阻塞的进程。这里不是传统的信号处理。估计你的问题是如果pthread_cond_signle发出了通知,但是还没释放锁,这个时候wait得不到锁从而再次陷入阻塞,直到pthread_cond_signle线程释放锁之后才会wait成功。所以一般的建议是先释放锁 然后pthread_cond_signle。这样效率会比较高。
第一 你的pthread_cond_wait不是通过放到信号处理函数里面来实现这个功能的。这里所说的pthread_cond_signle发出的信号,你更多的应该看成是操作系统发出的一个通知,通知因为等待条件变量而陷入阻塞的进程。这里不是传统的信号处理。估计你的问题是如果pthread_cond_signle发出了通知,但是还没释放锁,这个时候wait得不到锁从而再次陷入阻塞,直到pthread_cond_signle线程释放锁之后才会wait成功。所以一般的建议是先释放锁 然后pthread_cond_signle。这样效率会比较高。
使用了pthread_cond_signle接着不是pthread_mutex_unlock(&mutex)这里不是会释放互斥量么。被唤醒的wait线程就会获取这个互斥量。怎么说wait抢不到互斥量呢
《Windows核心编程》
64,654
社区成员
250,484
社区内容
加载中
试试用AI创作助手写篇文章吧