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

binary semaphoreの意味が明確ではありません。2 つの状態を持つことができるものを意味する場合、ミューテックスまたは 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);
于 2015-08-22T16:05:39.620 に答える