R..*_*R.. 6 c synchronization posix pthreads condition-variable
根据POSIX,
销毁当前没有线程被阻塞的初始化条件变量应该是安全的.
此外,指定信号和广播操作以解除阻塞在条件变量上阻塞的一个/所有线程.
因此,在我看来,以下形式的自同步破坏应该是有效的,即pthread_cond_destroy
:
当然,假设没有其他服务员到达,之后不再执行任何信号,如果使用,应用程序负责保证pthread_cond_destroy
.
我是否认为破坏在这些情况下是有效的?还有其他自我同步的破坏场景需要注意条件变量吗?
最后,对于在没有破坏的情况下取消映射共享映射的进程共享cond变量可能是有意义的,期望取消映射在相同的上下文中有效是合理的,破坏是有效的,或者如果同一进程中的多个线程必须进一步同步(地址空间)使用相同的映射,并希望在上述某个上下文中取消映射?
不,我不认为你的大多数假设都是正确的。pthread_cond_signal
从or返回pthread_cond_broadcast
并不表示任何线程尚未从条件变量中“解除阻塞”,即要解除阻塞的线程不再需要访问该变量。该标准只说“应解锁”,而不是“从该调用成功返回后,它们将被解锁”。后者对于实现来说会受到很大的限制,因此按原样制定可能是有充分理由的。
因此,我认为从您描述的场景来看,只有一种情况是有效的,即单独阻塞的线程或进程在被唤醒后破坏条件的情况。