我目前正在學習POSIX線程,並致力於掌握整體的併發性。我現在正在查看sem_init()
的手冊頁。它需要一個參數來定義傳遞給它的信號量是在線程之間共享(零)還是在進程之間共享(非零)。有人能給我一個很好的解釋這裏的區別。我認爲我瞭解基礎知識,但一些建議和澄清將非常感激。在進程的線程之間共享信號量和在進程之間共享信號量有什麼區別?
1
A
回答
2
好,差應或多或少明顯從man sem_init
:
如果
pshared == 0
則信號燈會不會是當前進程外部可見的,並且它可能會在這個過程結束後自動銷燬。因此,僅在屬於此進程的線程之間進行同步纔是有用的,並且由於線程始終共享內存,因此sem
參數可以由任何線程直接使用,而無需進一步的操作。如果
pshared != 0
那麼該信號將可用於其他進程,前提是它們可以訪問由sem
指向的內存。爲此,您將需要共享內存,或者在之後使用fork()
繼承它,創建信號量。另外,如果你沒有明確銷燬信號量,在某些實現中(我不知道哪些信號量)信號量可能會泄漏。
當然,你也可以使用一個非零的pshared信號同步線程,只是忽略了過程中的一部分。但是進程信號使用更多的資源,通常是一個操作系統對象,而線程信號通常可以在用戶空間中100%實現;所以這只是在浪費資源。
相關問題
- 1. 在並行進程之間共享信號量對象python
- 2. 在ThreadPool線程之間共享gevent鎖/信號量?
- 3. 在進程之間共享變量
- 4. 將信號量共享到進程
- 5. 在多進程之間共享進程之間的狀態
- 6. 共享內存中的信號量,進程和遞增變量
- 7. 使用信號量和共享變量進行Java編程
- 8. 線程間共享信息
- 9. cuda:線程塊之間共享'常量'
- 10. PYQT - 共享QThread之間的信號
- 11. 在沒有IPC的Perl中的子進程之間共享變量::共享
- 12. C - 沒有共享所有進程的信號量
- 13. 在不同進程之間共享HDC
- 14. 在進程之間共享tensorflow模型
- 15. Python:在進程之間共享消息
- 16. 在Python進程之間共享導入
- 17. 在進程之間共享Java畫布
- 18. 在mod_python進程之間共享數據
- 19. 線程之間共享什麼資源?
- 20. 在Mac OS中的進程之間共享未命名的信號燈
- 21. 在所有PHP進程之間共享變量/內存
- 22. Posix在父進程和子進程之間共享內存?
- 23. 共享內存進程間通信
- 24. Watin ApartmentState.STA線程和父線程之間的共享變量?
- 25. 在多個進程之間共享共享對象
- 26. Mach信號量是否在進程間的共享內存中工作?
- 27. Python共享進程之間的鎖
- 28. Android應用程序之間的GPS信號共享
- 29. 在PHP中的子進程之間共享變量?
- 30. 子進程之間共享指針