当前位置: 首页 > 知识库问答 >
问题:

在C语言中使用POSIX实现多个进程(不是线程,只是进程)之间的二进制信号量共享

曹新觉
2023-03-14
 typedef struct BIN_SEMA
  { 
     pthread_cond_t  cv;    /* cond. variable 
                                   - used to block threads */
     pthread_mutex_t mutex; /* mutex variable
                             - used to prevents concurrent
                                    access to the variable "flag" */
     int     flag;          /* Semaphore state: 
                                    0 = down, 1 = up */
   } bin_sema;

我只能在线程之间使用它,但我想在进程之间共享。所以我的问题是,如何使用posix计数信号量来制作二进制信号量?

共有1个答案

阳英朗
2023-03-14

不清楚你所说的二进制信号量是什么意思。如果您指的是可以有两个状态的东西,那么用一个初始化的互斥体或信号量在功能上是等价的。

如果希望跨进程共享信号量,可以使用命名信号量······

sem_t* sem = sem_open("/APP/SEMAPHORE", O_CREAT, (S_IRUSR | S_IWUSR), 1);

sem_wait(sem);

// do stuff

sem_post(sem);

// do more stuff

sem_unlink("/APP/SEMAPHORE");

要在进程间强制互斥,可以使用文件...

const char* lock_file = ".lock";

const int fd_lock = open(lock_file, O_CREAT);

flock(fd_lock, LOCK_EX);

// do stuff

flock(fd_lock, LOCK_UN);

// do more stuff

close(fd_lock);    
unlink(lock_file);
 类似资料:
  • 问题内容: 我想派生多个进程,然后在它们上使用一个信号灯。这是我尝试过的: 输出为: 显然,这意味着信号灯没有按预期的方式工作。您能解释一下我应该如何在分支进程中使用信号量? 问题答案: 您面临的问题是对功能的误解。阅读手册页时, 您将看到以下内容: pshared参数指示此信号量是在进程的线程之间还是在进程之间共享。 如果您到此为止都读完了,您将认为pshared的非零值将使信号量成为进程间信号

  • 这显然意味着信号量没有正常工作。你能解释一下我应该如何在分叉进程上使用信号量吗?

  • Python 3.1.2 我对多处理产生的两个线程之间的变量共享有问题。过程这是一个简单的bool变量,它应该决定线程是应该运行还是应该停止执行。下面是三种情况下显示的简化代码(但使用与我的原始代码相同的机制): 主要用于Thread加工。Thread类型和自紧度。正在运行布尔类型[工作正常] 我想了解的是为什么它是这样工作的,而不是另一种。(即,为什么第2点没有像我认为的那样起作用)。 测试是从

  • 我有多个进程与Sempahore同步。我知道这段代码不允许gurantee出现这样的情况:在sem_getvalue期间,即使值变为零,甚至在调用特定进程中的sem_post之前,anotehr进程也可能调用sem_post,使值变为2。如何解决这种情况。 我的问题不能通过互斥体来解决,在我的问题中,有些进程只用于信号,即操作,而在互斥体中,所有进程都将等待并不断地发出信号

  • 问题内容: 通过回答此问题,可以回答所有其他三个问题。希望我能说清楚: 在通过多处理创建的某些过程中创建对象后: 如何将对该对象的 引用 传递给其他进程? (不是很重要)我如何确保持有参考书时此过程不会消失? 示例1(已解决) 例子2 假设返回一个具有可变状态的对象。这个相同的对象应该可以从其他进程访问。 例子3 我有一个带有打开文件和锁的对象-如何授予对其他进程的访问权限? 提醒 我不希望此特定