揮発性のメモ2

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

flock

ファイルロックを使ったプロセス間での排他制御

// gcc -Wall -lpthread test_flock.c

#include <fcntl.h>      // O_CREAT
#include <sys/file.h>   // flock
#include <stdio.h>      // printf
#include <unistd.h>     // sleep

int main()
{
    int fd = open("/tmp/hoge", O_CREAT, 0600);

    printf("ロック\n");
    flock(fd,LOCK_EX);

    printf("30秒スリープ\n");
    sleep(30);
    
    printf("アンロック\n");
    flock(fd,LOCK_UN);
    
    return 0;
}

Man page of FLOCK

  • 長所
    • 実装が超簡単
    • プログラムが途中で死んでもロックが解除される
      • これは他のすべての問題を無視できる強み
    • 他言語との連携も簡単
    • 排他ロックだけじゃなく共有ロックもできる
    • 他プロセスとの待ち合わせが発生してもそんなに遅延しない
      • もともとが超遅いから競合の時間が目立たないだけかも
  • 短所
    • めちゃくちゃ遅い
      • sem_waitとかの40倍くらい遅い
      • ロックファイルをRAMディスク上に作ってもダメ