3

我正在使用 C 语言中的 POSIX 在多个进程(不是线程,仅进程)之间共享二进制信号量。如果我使用互斥体创建二进制信号量,

 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 计数信号量制作二进制信号量?

4

1 回答 1

2

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

如果要跨进程共享信号量,可以使用命名信号量...

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);
于 2015-08-22T16:05:39.620 回答