Создание двоичного семафора, совместно используемого несколькими процессами (не потоками, Process Only) с использованием POSIX на языке C

Я делаю двоичный семафор, совместно используемый несколькими процессами (не потоками, только процесс), используя POSIX на языке C. если я создаю двоичный семафор, используя мьютекс,

 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 ответ

Непонятно, что вы подразумеваете под двоичным семафором. Если вы имеете в виду что-то, что может иметь два состояния, то мьютекс или семафор, инициализированный одним, будет функционально эквивалентным.

Если вы хотите разделить семафор между процессами, вы можете использовать именованный семафор...

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);
Другие вопросы по тегам