gpt4 book ai didi

c - C Linux 编程中的信号量

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:19:30 25 4
gpt4 key购买 nike

我正在接管一些在 Linux (Centos) 中运行的 C 代码,并广泛使用信号量。代码的写法:

./程序1

这个程序启动了一堆使用互斥量和信号量的进程。

./程序2

该程序还启动了一系列使用互斥锁和信号量的进程。

我已经意识到 Program1 和 Program2,它们使用同名的信号量。Linux C 编程中,不同的程序可以使用相同的信号量吗?我的猜测是否定的,但相同的命名让我感到困惑。他们使用相同的源代码来启动和处理信号量。

使用以下命令调用信号量:

semget半月抢购我读到这些被称为进程信号量。如果 Program1 创建 SEMAPHORE1,Program2 可以访问 SEMAPHORE1 吗?

在此感谢任何帮助,谢谢!

最佳答案

假设您指的是命名信号量(或者甚至是存储在共享内存中的未命名信号量,两者都可以使用 sem_open 创建),它们通常在进程之间共享。 p>

使用 semget 的信号量和相关调用使用 ID 键而不是名称,但它们的使用模式相似。

信号量是 IPC(进程间通信)方法之一。

可以通过在非共享内存中使用未命名的变体来创建一个单进程信号量,这将只能由给定进程的线程访问,但根据我的经验,这不是一个常见的用例。 semget 调用系列还可以为您提供进程专用信号量。

另一方面,互斥体更倾向于在单个进程中用于线程间通信,但甚至还有一种可以在进程间工作的变体。

您创建一个允许共享互斥量的 pthread_mutexattr(属性),然后在初始化您想要共享的互斥量时使用该属性。显然,互斥量需要位于共享内存中,以便多个进程可以访问它。

关于c - C Linux 编程中的信号量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24421718/

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