Linux のマルチプロセスロックの実装方法
Linuxでは、マルチプロセスロックは次のようにして実装できます。
- flockファイルロックを使用する: flock 関数を使用して、複数プロセス間でファイルロックを共有することができます。複数のプロセスは同じファイルに対して flock 操作を行うことで、相互排他ロックを実現できます。
- #include <sys/file.h>int fd = open(“lockfile”, O_WRONLY | O_CREAT, 0644);
flock(fd, LOCK_EX);
// クリティカルセクション内の処理
flock(fd, LOCK_UN);
close(fd); - セマフォを使用して、プロセス間の排他アクセスを実現します。セマフォは、semget、semctl、semop の各関数で作成、制御、操作できます。
- #include <sys/ipc.h>
#include <sys/sem.h>
…
int semid = semget(IPC_PRIVATE, 1, IPC_CREAT | IPC_EXCL | 0666);
union semun arg;
arg.val = 1;
semctl(semid, 0, SETVAL, arg);
struct sembuf op = {0, -1, 0};
semop(semid, &op, 1);
// 临界区操作
op.sem_op = 1;
semop(semid, &op, 1);
semctl(semid, 0, IPC_RMID); - ミューテックス(mutex)を使用する:プロセス間で排他アクセスを実現するためにミューテックスを使用できます。ミューテックスはpthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock関数を使用して初期化、ロック、ロック解除できます。
- #include pthread_mutex_t mutex;
pthread_mutex_init(&mutex, NULL);
pthread_mutex_lock(&mutex);
// クリティカルセクション操作
pthread_mutex_unlock(&mutex);
pthread_mutex_destroy(&mutex);
いずれの方法も複数のプロセス間での排他的アクセスを実現でき、具体的な選択はあなたの具体的なニーズや状況によって異なります。