我将接管一些在Linux (Centos)中运行的C代码,并广泛使用信号量。代码的编写方式:
./方案1
这个程序启动了一组使用互斥和信号量的进程。
./方案2
这个程序还启动了一组进程,这些进程使用互斥量和信号量。
我已经意识到,Program1和Program2使用了同名的信号量。在Linux编程中,不同的程序可以使用相同的信号量吗?我猜不是,但同样的名字把我搞糊涂了。他们使用相同的源代码来启动和处理信号量。
使用以下命令调用信号量:
我读过,这些都是进程信号量..。如果Program1创建了SEMAPHORE1,Program2可以访问SEMAPHORE1吗?
感谢您的帮助,谢谢!
发布于 2014-06-26 03:08:57
假设您指的是命名信号量(甚至是存储在共享内存中的未命名信号量,这两者都可以用sem_open创建),它们通常是在进程之间共享的。
使用semget和相关调用的信号量使用ID键而不是名称,但它们的使用模式相似。
信号量是进程间通信( IPC )方法之一.
通过在非共享内存中使用一个未命名的变量,您可以创建一个只有一个进程的信号量,并且这只能供给定进程的线程访问,但在我的经验中,这不是一个常见的用例。semget系列的呼叫还可以为您提供进程私有信号量。
另一方面,Mutexes倾向于在单个进程中更多地用于线程间通信,但它们中甚至有一个变体可以在进程间工作。
您创建一个允许共享互斥的pthread_mutexattr (属性),然后在初始化要共享的互斥对象时使用该属性。显然,互斥必须在共享内存中,以便多个进程能够访问它。
https://stackoverflow.com/questions/24421718
复制相似问题