小编use*_*176的帖子

多个线程能够同时获得群集

我的印象是flock(2)是线程安全的,我最近在代码中遇到了这种情况,其中多个线程能够锁定同一个文件,这些文件都与使用获取独占锁使用同步c api flock.过程25554是具有20个线程的多线程应用程序,当发生死锁时,锁定到同一文件的线程数量变化.多线程应用程序testEvent是文件的编写者,其中push是文件中的reader.不幸的是,lsof它不会打印LWP值,所以我找不到哪个是持有锁的线程.当下面提到的情况发生时,进程和线程都停留在flock 调用上,如pid 25569和25554上的调用pstackstrace调用所示.有关如何在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)

c linux glibc flock

10
推荐指数
1
解决办法
1万
查看次数

标签 统计

c ×1

flock ×1

glibc ×1

linux ×1