我们使用的一次性初始化这样的并行线程:pthread_once_t变量是否需要互斥锁?
/* define a statically initialized pthread_once_t variable */
pthread_once_t once_var = PTHREAD_ONCE_INIT;
/* we call pthread_once function in threads */
int pthread_once(pthread_once_t *once_control, void (*init)(void));
当多个线程将改变pthread_once_t
变量的状态,我们需要一个互斥量来保护呢?
为什么你需要确保'once_var'不是自动的?只要它在整个可能的使用期内保持在范围内,它应该可以正常工作。 – 2011-06-02 12:46:07
@R:因为这就是man page所说的:-)如果变量是自动的,它就是未定义的行为。它可能会工作,UB有时会这样做,但这并不是一个明智的决定,依赖于它,不仅仅是ISO C标准中的UB。我怀疑这是他们担心的超出范围的可能性,但我不确定。 – paxdiablo 2011-06-02 13:48:42