fcntl()用于线程或进程同步?

时间:2009-11-19 18:02:50

标签: c++ c synchronization semaphore fcntl

是否可以对文件使用fcntl()系统调用来实现线程/进程同步(而不是信号量)?

3 个答案:

答案 0 :(得分:6)

是。 Unix fcntl锁(以及一般的文件系统资源)是系统范围的,因此任何两个执行线程(无论它们是否是单独的进程)都可以使用它们。这是一个好主意是否与上下文有关。

答案 1 :(得分:1)

这是在进程之间进行同步的一种方法,但如果您不想使用信号量,则可以使用进程共享的互斥锁,例如在基于POSIX的平台上使用PTHREAD_PROCESS_SHARED属性创建的互斥锁和条件变量(请参阅pthread_mutexattr_setpshared()pthread_condattr_setpshared())。另一个选择是使用基于事件的IPC(套接字等)机制,该机制会阻塞,直到您定义的事件被多路分解(例如,通过select())。还有其他几种基于共享内存的选项。

但是,由于您使用的是C ++,我建议您使用C ++框架,这样可以在boost.interprocessACE等多个平台上大大简化这种进程间同步。

答案 2 :(得分:-1)

fcntl和flock不是用于线程,而是用于进程,因此它们不能用于线程同步。