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