gpt4 book ai didi

multithreading - 知道有多少人在等待 pthread 互斥锁

转载 作者:行者123 更新时间:2023-12-05 07:59:48 24 4
gpt4 key购买 nike

我想知道有多少线程在等待锁,以便我能够安全地销毁它。

问题是当有人持有锁或有人等待时我无法销毁锁。我的程序可以确保不会发出新的请求来获取锁,但我如何才能知道等待它的所有线程何时完成处理?

我考虑过条件变量,但我怀疑它会产生问题..

最佳答案

dlv,你能在你的描述中添加一些代码片段吗?我希望你应该使用条件变量,

每个线程都将阻塞在 pthread_cond_wait() 中,直到另一个线程发出唤醒信号。这不会造成死锁。通过为每个线程分配一个 intpthread_cond_tpthread_mutex_t,它可以很容易地扩展到多个线程。

pthread_cond_wait() 阻塞调用线程,直到发出指定条件信号。这个例程应该在互斥锁被锁定时调用,它会在等待时自动释放互斥锁。接收到信号,线程被唤醒后,mutex会自动锁定,供线程使用。程序员然后负责在线程完成时解锁互斥量。

pthread_cond_signal() 例程用于通知(或唤醒)另一个正在等待条件变量的线程。它应该在 mutex 被锁定后调用,并且必须解锁 mutex 才能完成 pthread_cond_wait() 例程。

如果多个线程处于阻塞等待状态,则应使用 pthread_cond_broadcast() 例程而不是 pthread_cond_signal()。

在调用pthread_cond_wait()之前调用pthread_cond_signal()是逻辑错误。

使用这些例程时,正确锁定和解锁关联的互斥量变量是必不可少的。例如:在调用 pthread_cond_wait() 之前未能锁定互斥量可能会导致它不阻塞。在调用 pthread_cond_signal() 后未能解锁互斥锁可能不允许匹配的 pthread_cond_wait() 例程完成(它将保持阻塞状态)。

关于multithreading - 知道有多少人在等待 pthread 互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20801468/

24 4 0