ファイルディスクリプタさえ違っていれば、スレッド間でも排他制御できるっぽい?
5秒間ロックを保持するスレッドを作成
void *flocktest( void *arg )
{
int number = (int)arg;
int fd;
fd = open( "/tmp/hoge", O_RDONLY|O_CREAT, 0777 );
printf("flock %d start\n", number);
flock( fd, LOCK_EX );
printf("flock %d flock OK\n", number);
sleep(5);
close(fd);
printf("flock %d end\n", number);
return NULL;
}そのスレッドを5回くらい読んでみる
int main( int argc, char **argv )
{
int i;
pthread_attr_t attr;
pthread_t tid;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);
for(i=1;i<=5;i++){
pthread_create( &tid, &attr, flocktest, (void*)i );
// sleep(3);
}
sleep(60);
return 0;
}実行結果:他のスレッドがロックを開放するのをちゃんと待っているっぽい。
$ ./flockthreadtest flock 1 start flock 1 flock OK flock 2 start flock 3 start flock 4 start flock 5 start flock 1 end flock 2 flock OK flock 2 end flock 3 flock OK flock 3 end flock 4 flock OK flock 4 end flock 5 flock OK flock 5 end