【问题标题】:C: How to add timeout on flock?C:如何在flock中添加超时?
【发布时间】:2016-02-10 10:30:14
【问题描述】:

在C编程中,有没有办法在flock()上实现超时?

谢谢。

#include <sys/file.h>

int flock(int fd, int operation);

【问题讨论】:

  • 没有超时支持,只有LOCK_NB。如果在等待锁时需要超时,则需要用信号中断锁操作。 python版本是here
  • 你的意思是调用函数超时,或者一段时间后自动解锁文件超时?
  • 一段时间后,您或许可以使用alarmsetitimer 打断自己。

标签: c flock


【解决方案1】:

您可以使用 SIG_ALARM 来执行此操作。 http://www.gnu.org/software/libc/manual/html_node/Setting-an-Alarm.html 不过这有点棘手,尤其是在处理多个线程时。您必须确保您的系统将 sig 警报传递给始终设置它的线程,并且可能并非如此......在这种情况下,您需要使用 pthread_sigmask http://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_sigmask.html 确保只有你的线程启用了信号......但是如果 2 个线程同时阻塞了羊群怎么办?您需要为此添加某种互斥体包装器。

【讨论】:

  • 谢谢,我暂时使用 LOCK_NB 方法。
  • LOCK_NB 的问题在于,您获得锁的延迟与您的睡眠时间相等,这是很少能接受的。
  • 请注意,“在任何给定时间,您只能为每种类型设置一个计时器”。这意味着代码模块不能只设置警报。必须有一个可以协调所有 SIGALRM 客户端的进程范围的管理器。例如:boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/…
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 2019-05-26
  • 2011-01-12
  • 2021-04-25
  • 2021-02-25
相关资源
最近更新 更多