簡體   English   中英

使用C語言中的POSIX在多個進程(非線程,僅處理)之間共享二進制信號量

[英]Making binary semaphore shared between multiple processes(not threads , Process Only) using POSIX in C language

我正在使用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計數信號量來制作二進制信號量?

目前尚不清楚二進制信號量的含義。 如果你的意思是可以有兩種狀態,那么用一個互斥體初始化的互斥體或信號量在功能上是等價的。

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

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM