C语言编程中的信号量

时间:2014-06-26 03:02:48

标签: c linux centos

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

./ Program1

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

./ Program2中

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

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

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

了semget 了semctl 执行semop 我读过这些被称为进程信号量..如果Program1创建SEMAPHORE1,Program2可以访问SEMAPHORE1吗?

感谢您的任何帮助,谢谢!

1 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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