是否可以在文件上使用 fcntl() 系统调用来实现线程/进程同步(而不是信号量)?
问问题
1756 次
3 回答
6
是的。Unix fcntl 锁(和一般的文件系统资源)是系统范围的,因此任何两个执行线程(无论它们是否是独立的进程)都可以使用它们。这是否是一个好主意取决于上下文。
于 2009-11-19T19:47:42.373 回答
2
这是在进程之间同步的一种方式,但如果您不想使用信号量,则可以使用进程共享互斥锁,例如互斥锁和PTHREAD_PROCESS_SHARED
在基于 POSIX 的平台上使用属性创建的条件变量(请参阅pthread_mutexattr_setpshared()
和pthread_condattr_setpshared()
)。另一种选择是使用基于事件的 IPC(套接字等)机制,该机制会阻塞直到您定义的事件被解复用(例如 via select()
)。还有其他几个基于共享内存的选项。
但是,由于您使用的是 C++,我建议您使用 C++ 框架,该框架可以大大简化跨多个平台(如boost.interprocess或ACE )的这种进程间同步。
于 2009-11-19T19:59:11.067 回答
-1
fcntl 和flock 不是针对线程的,而是针对进程的,所以不能用于线程同步。
于 2014-04-04T12:05:07.033 回答