我的印象是flock(2)是线程安全的,我最近在代码中遇到了这种情况,其中多个线程能够锁定同一个文件,这些文件都与使用获取独占锁使用同步c api flock.过程25554是具有20个线程的多线程应用程序,当发生死锁时,锁定到同一文件的线程数量变化.多线程应用程序testEvent是文件的编写者,其中push是文件中的reader.不幸的是,lsof它不会打印LWP值,所以我找不到哪个是持有锁的线程.当下面提到的情况发生时,进程和线程都停留在flock 调用上,如pid 25569和25554上的调用pstack或strace调用所示.有关如何在RHEL 4.x中解决此问题的任何建议.
我想要更新的一件事是flock不会一直行为不端,当消息的tx速率超过2 mbps时我才会遇到flock的死锁问题,低于tx速率一切都是文件.我保持num_threads= 20,size_of_msg= 1000字节不变,只是将每秒tx的消息数量从10条消息开始变为100条消息,即20*1000*100 = 2 mbps,当我将消息数量增加到150然后发送问题时发生.
我只是想问一下你对flockfile c api有什么看法.
sudo lsof filename.txt
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
push 25569 root 11u REG 253.4 1079 49266853 filename.txt
testEvent 25554 root 27uW REG 253.4 1079 49266853 filename.txt
testEvent 25554 root 28uW REG 253.4 1079 49266853 filename.txt
testEvent 25554 root 29uW REG 253.4 1079 49266853 filename.txt
testEvent 25554 …Run Code Online (Sandbox Code Playgroud)