我目前正在学习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. 子进程之间共享指针