gpt4 book ai didi

c - 什么时候可以使用 cond var 来同步它自己的销毁/取消映射?

转载 作者:太空狗 更新时间:2023-10-29 17:25:52 24 4
gpt4 key购买 nike

根据 POSIX,

It shall be safe to destroy an initialized condition variable upon which no threads are currently blocked.

此外,信号和广播操作被指定为解除阻塞在条件变量上的一个/所有线程。

因此,在我看来,以下形式的自同步销毁应该是有效的,即调用 pthread_cond_destroy:

  1. 在一个成功的信号之后,在等待或信号线程中,恰好有一个线程被 cond var 阻塞时。
  2. 在广播成功后立即在任何等待线程或广播线程中。

当然,这是假设没有更多的等待者到达并且之后不会执行进一步的信号,如果使用 pthread_cond_destroy,应用程序负责保证这一点。

我说的销毁在这些情况下有效吗?是否还有其他需要注意的条件变量自同步销毁场景?

最后,对于进程共享条件变量,在不破坏的情况下取消映射共享映射可能有意义,期望取消映射在相同上下文中有效是否合理,破坏将是有效的,或者如果多个线程在相同的进程(地址空间)正在使用相同的映射并希望在上述上下文之一中取消映射?

最佳答案

不,我认为您的大部分假设都不正确。从 pthread_cond_signalpthread_cond_broadcast 返回并不表示任何线程尚未从条件变量“解除阻塞”,即要解除阻塞的线程不需要不再访问该变量。该标准只说“应该解锁”而不是“从这个调用成功返回后他们将被解锁”。后者对实现有很大的限制,因此按原样制定可能有充分的理由。

所以我认为从您描述的场景来看,只有一个是有效的,即单独阻塞的线程或进程在被唤醒后破坏了条件。

关于c - 什么时候可以使用 cond var 来同步它自己的销毁/取消映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7598457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com