我們是否在pthread_once()中使用了任何鎖定機制?在線程安全單例類中使用pthread_once()而不是使用pthread_mutex_lock()和pthread_mutex_unlock()的成本是多少?pthread_once()如何在內部實現?
3
A
回答
3
該規範沒有定義pthread_once
和pthread_mutex_lock
必須如何實現,但只有它們必須如何行爲,所以不同的平臺將有不同的實現。
通常可以使pthread_once
比互斥體簡單(因爲它只需要一個原子測試和設置操作,並且沒有阻塞),但是我也懷疑pthread_mutex_lock
可能會獲得更多的優化,因爲它很多應用更廣泛。
如果你關心性能,你將不得不編寫一個基準測試並在你定位的平臺上運行它,然後選擇一個更快的測試。
1
您可以直接讀取的 pthread_once
glibc的執行你是幸運的,因爲最近的glibc團隊統一在整個支持體系的所有不同的實現。他們能夠用現代C代碼取代純裝配,這些C代碼也可以使用C11原子支持。
相關問題
- 1. 如何實現'內部'zip?
- 2. 如何實現內部RecyclerView
- 3. 如何實現內部DialogFragment
- 4. 協議在內部如何實現?
- 5. malloc()如何在內部實現?
- 6. Key-Value Observing如何在內部實現?
- 7. Android系統如何實現內部intentservice
- 8. 如何實現一個內部類?
- 9. 內部如何實現擴展方法
- 10. Redis內部如何實現Key?
- 11. 如何實現內部片段
- 12. Golang - 內部結構如何實現?
- 13. java如何實現內部類關閉?
- 14. ArrayList內部實現
- 15. 如何枚舉在內部實現,以及如何在Java
- 16. PHP的內置函數是如何在內部實現的?
- 17. CPython內部實現的文檔實現
- 18. Haskell內部的IO實現
- 19. TreeMap的內部實現
- 20. 內部實現像kproxy
- 21. 在java中需要內部實現HashTable
- 22. 如何實現內部內容依賴屬性?
- 23. 在SQL Server中如何實現內部和外部和外部連接?
- 24. 如何在類類型內部實現類類型?
- 25. 如何在應用程序內部實現交互式教程?
- 26. Java如何在內部提供Array的實現?
- 27. 如何在片段內部實現水平滑動?
- 28. Git的「日誌文件名」如何在內部實現
- 29. 如何在django應用程序內部實現多個網站?
- 30. java接口如何在內部實現? (vtables?)
聽起來像它可以用簡單的原子讀/寫來完成。另外,如果我正確閱讀,它似乎並不鎖定。 –
如果你不打算問一個特定的平臺,答案是,「無論你的pthreads庫的設計者認爲哪種平臺最好。 –