揮発性のメモ2

http://d.hatena.ne.jp/iww/

sem_open

名前付きセマフォを使ったプロセス間での排他制御

// gcc -Wall -lpthread test_sem.c
// 動かんときは rm /dev/shm/sem.unko

#include <fcntl.h>      // O_CREAT
#include <semaphore.h>  // sem_wait
#include <stdio.h>      // printf
#include <unistd.h>     // sleep

int main()
{
    // 1を指定するとバイナリセマフォになるよ
    sem_t *sem = sem_open("/unko", O_CREAT, 0600, 1);

    printf("ロック\n");
    sem_wait(sem);

    printf("30秒スリープ\n");
    sleep(30);
    
    printf("アンロック\n");
    sem_post(sem);
    
    return 0;
}

Man page of SEM_OPEN

  • 長所
    • 実装が超簡単
    • 結構速い
  • 短所
    • プログラムが途中で死ぬとロックがかかりっぱなしになる
    • 他言語と連携はできない