gpt4 book ai didi

multithreading - 在进程的线程之间共享信号量与在进程之间共享信号量之间有什么区别?

转载 作者:行者123 更新时间:2023-12-03 13:20:27 26 4
gpt4 key购买 nike

我目前正在学习POSIX线程,并致力于整体并发。我现在正在寻找 sem_init() 的手册页。它使用一个参数来定义传递给它的信号量是在线程之间共享(零)还是在进程之间共享(非零)。有人可以给我很好的解释这里的区别。我想我了解基本知识,但请多多指教和澄清。

最佳答案

好吧,区别应该从man sem_init或多或少显而易见:

  • 如果使用pshared == 0,则该信号量将在当前进程之外不可见,并且在完成该过程后可能会被自动销毁。因此,仅在属于该进程的线程之间进行同步是有用的,并且由于线程始终共享内存,因此sem参数可以由任何线程直接使用,而无需进一步的操作。
  • 如果使用pshared != 0,则该信号量将对其他进程可用,前提是它们可以访问sem指向的内存。为此,您将需要共享内存或在创建信号量后使用fork()继承它。另外,如果您没有明确销毁信号灯,则在某些实现中(我不知道是哪种),信号灯可能会泄漏。

  • 当然,您可以使用非零共享信号量来同步线程,而忽略进程部分。但是进程信号量使用更多的资源,通常是OS对象,而线程信号量通常可以在用户区中100%实现。因此这样做只会浪费资源。

    关于multithreading - 在进程的线程之间共享信号量与在进程之间共享信号量之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18294446/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com