Multithreading 什么';在进程线程之间共享信号量和在进程之间共享信号量有什么区别?
我目前正在学习POSIX线程,并致力于从整体上掌握并发性。我现在正在查看手册页以了解更多信息。它需要一个参数来定义传递给它的信号量是在线程之间共享(零)还是在进程之间共享(非零)。有人能给我一个很好的解释一下这里的区别吗。我想我了解基本知识,但一些建议和澄清将是非常感谢的。好吧,从Multithreading 什么';在进程线程之间共享信号量和在进程之间共享信号量有什么区别?,multithreading,concurrency,pthreads,Multithreading,Concurrency,Pthreads,我目前正在学习POSIX线程,并致力于从整体上掌握并发性。我现在正在查看手册页以了解更多信息。它需要一个参数来定义传递给它的信号量是在线程之间共享(零)还是在进程之间共享(非零)。有人能给我一个很好的解释一下这里的区别吗。我想我了解基本知识,但一些建议和澄清将是非常感谢的。好吧,从man sem\u init来看,差异应该或多或少是明显的: 如果pshared==0,则信号量在当前进程外部将不可见,并且在该进程完成时可能会自动销毁。因此,只有在属于此进程的线程之间进行同步才有用,而且由于线程始
man sem\u init
来看,差异应该或多或少是明显的:
- 如果
,则信号量在当前进程外部将不可见,并且在该进程完成时可能会自动销毁。因此,只有在属于此进程的线程之间进行同步才有用,而且由于线程始终共享内存,pshared==0
参数可由任何线程直接使用,无需进一步操作sem
- 如果
则此信号量将可用于其他进程,前提是它们可以访问pshared!=0
指向的内存。为此,您需要共享内存或在创建信号量后使用sem
继承它。另外,如果不显式销毁信号量,在某些实现中(我不知道是哪种实现),信号量可能会泄漏fork()