【发布时间】:2010-12-18 10:17:23
【问题描述】:
是否可以对文件使用 fcntl() 系统调用来实现线程/进程同步(而不是信号量)?
【问题讨论】:
-
您为什么要这样做?有关您要完成的工作的更多信息会有所帮助。
标签: c++ c synchronization semaphore fcntl
是否可以对文件使用 fcntl() 系统调用来实现线程/进程同步(而不是信号量)?
【问题讨论】:
标签: c++ c synchronization semaphore fcntl
是的。 Unix fcntl 锁(和一般的文件系统资源)是系统范围的,因此任何两个执行线程(无论它们是否是独立的进程)都可以使用它们。这是否是一个好主意取决于上下文。
【讨论】:
这是进程之间同步的一种方式,但如果您不想使用信号量,则可以使用进程共享互斥锁,例如在基于 POSIX 的平台上使用PTHREAD_PROCESS_SHARED 属性创建的互斥锁和条件变量(请参阅@987654321 @ 和 pthread_condattr_setpshared())。另一种选择是使用基于事件的 IPC(套接字等)机制,该机制会阻塞直到您定义的事件被解复用(例如,通过 select())。还有其他几个基于共享内存的选项。
但是,由于您使用的是 C++,我建议您使用 C++ 框架,该框架可以极大地简化这种跨多个平台的进程间同步,例如 boost.interprocess 或 ACE。
【讨论】:
fcntl和flock不是用于线程的,而是用于进程的,所以不能用于线程同步。
【讨论】: