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

时间:2016-01-21 16:00:58

标签: multithreading pthreads posix

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

2 个答案:

答案 0 :(得分:3)

规范没有定义必须如何实现pthread_oncepthread_mutex_lock,而只定义它们必须如何表现,因此不同的平台将有不同的实现。

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

如果您关心性能,则必须编写基准并在您定位的平台上运行它,并选择更快的基准。

答案 1 :(得分:1)

您可以直接阅读 pthread_once

的glibc实现

你很幸运,因为最近glibc团队在支持的架构中统一了所有不同的实现。他们能够用现代C代码替换纯组件,这些代码也使用C11原子支持