是否可以对文件使用fcntl()系统调用来实现线程/进程同步(而不是信号量)?
答案 0 :(得分:6)
是。 Unix fcntl锁(以及一般的文件系统资源)是系统范围的,因此任何两个执行线程(无论它们是否是单独的进程)都可以使用它们。这是一个好主意是否与上下文有关。
答案 1 :(得分:1)
这是在进程之间进行同步的一种方法,但如果您不想使用信号量,则可以使用进程共享的互斥锁,例如在基于POSIX的平台上使用PTHREAD_PROCESS_SHARED
属性创建的互斥锁和条件变量(请参阅pthread_mutexattr_setpshared()
和pthread_condattr_setpshared()
)。另一个选择是使用基于事件的IPC(套接字等)机制,该机制会阻塞,直到您定义的事件被多路分解(例如,通过select()
)。还有其他几种基于共享内存的选项。
但是,由于您使用的是C ++,我建议您使用C ++框架,这样可以在boost.interprocess或ACE等多个平台上大大简化这种进程间同步。
答案 2 :(得分:-1)
fcntl和flock不是用于线程,而是用于进程,因此它们不能用于线程同步。