何时可以使用cond var来同步自己的销毁/取消映射?

R..*_*R.. 6 c synchronization posix pthreads condition-variable

根据POSIX,

销毁当前没有线程被阻塞的初始化条件变量应该是安全的.

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

因此,在我看来,以下形式的自同步破坏应该是有效的,即pthread_cond_destroy:

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

当然,假设没有其他服务员到达,之后不再执行任何信号,如果使用,应用程序负责保证pthread_cond_destroy.

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

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

Jen*_*edt 2

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

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