fcntl() 用于线程或进程同步?
-
21-09-2019 - |
题
是否可以在文件上使用 fcntl() 系统调用来实现线程/进程同步(而不是信号量)?
解决方案
是。的Unix的fcntl锁(和文件系统资源通常)是全系统的,所以执行的任何两个线程(它们被单独的进程或不)可以使用它们。是否这是一个好主意,或不是与上下文相关的。
其他提示
这是进程之间同步的一种方法,但如果您不想使用信号量,则可以使用进程共享互斥体,例如使用 PTHREAD_PROCESS_SHARED
基于 POSIX 的平台上的属性(请参阅 pthread_mutexattr_setpshared()
和 pthread_condattr_setpshared()
)。另一种选择是使用基于事件的 IPC(套接字等)机制,该机制会阻塞,直到您定义的事件被多路分解(例如通过 select()
)。还有其他几个基于共享内存的选项。
但是,由于您使用的是 C++,我建议使用 C++ 框架,它可以极大地简化跨多个平台的进程间同步,例如 增强进程间 或者 高手.
在的fcntl和群不是为螺纹,但对于过程,所以它们不能被用于线程同步。
不隶属于 StackOverflow