pthread_once() 是如何在内部实现的?

Tej*_*ula 5 multithreading posix pthreads

我们在 pthread_once() 中使用任何锁定机制吗?在线程安全单例类中使用 pthread_once() 而不是使用 pthread_mutex_lock() 和 pthread_mutex_unlock() 的成本是多少?

Aar*_*onI 3

该规范没有定义如何pthread_once以及pthread_mutex_lock必须实现,而只定义了它们必须如何表现,因此不同的平台会有不同的实现。

通常可以比pthread_once互斥体更简单(因为它所需要的只是原子测试和设置操作,并且没有阻塞),但我也怀疑pthread_mutex_lock可能会得到更多优化,因为它的使用更广泛。

如果您关心性能,则必须编写一个基准测试并在您的目标平台上运行它,然后选择速度更快的一个。