flock()によるロックの強制解除
flock()であるファイルのロックを取得したスレッドが不測の事態で落ちてしまったとき、
ロックを解除するにはどうしたらよいでしょうか?
ためしに
・あるスレッドでロック握ったまま終了
fp = fopen("./temp.txt","a+");
if(flock(fileno(fp),LOCK_EX | LOCK_NB )!=EXIT_SUCCESS){
perror("Failed to flock(LOCK_EN)");
}else{
printf("thread lock\n");
}
pthread_exit(NULL);
・別スレッドでアンロックしてロックする。
fp = fopen("./temp.txt","a+");
if(flock(fileno(fp),LOCK_UN |LOCK_NB )!=EXIT_SUCCESS){
perror("Failed to flock(LOCK_UN)");
}
fclose(fp);
fp = fopen("./temp.txt","a+");
if(flock(fileno(fp),LOCK_EX |LOCK_NB )!=EXIT_SUCCESS){
perror("Failed to flock(LOCK_EN)");
}
するプログラムを書いてみましたが、アンロックは成功しているのに
ロックは”Resource temporarily unavailable”でエラーになります。