Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ fcntl()用于线程或进程同步?_C++_C_Synchronization_Semaphore_Fcntl - Fatal编程技术网

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

C++ fcntl()用于线程或进程同步?,c++,c,synchronization,semaphore,fcntl,C++,C,Synchronization,Semaphore,Fcntl,是否可以对文件使用fcntl()系统调用来实现线程/进程同步(而不是信号量) 是的。Unix fcntl锁(以及一般的文件系统资源)是系统范围的,因此任何两个执行线程(无论它们是否是单独的进程)都可以使用它们。这是否是一个好主意取决于上下文。这是进程间同步的一种方式,但如果不想使用信号量,可以使用进程共享互斥体,例如在基于POSIX的平台上使用PTHREAD\u process\u shared属性创建的互斥体和条件变量(请参阅和)。另一种选择是使用基于事件的IPC(套接字等)机制,该机制将阻塞

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

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

这是进程间同步的一种方式,但如果不想使用信号量,可以使用进程共享互斥体,例如在基于POSIX的平台上使用
PTHREAD\u process\u shared
属性创建的互斥体和条件变量(请参阅和)。另一种选择是使用基于事件的IPC(套接字等)机制,该机制将阻塞,直到您定义的事件被解复用(例如,通过)。还有其他几个基于共享内存的选项


但是,既然你使用C++,我建议使用C++框架,这样可以大大简化跨多个平台的进程间同步,比如,或./p>< P>,FCNTL和FROK不是线程,而是进程,所以它们不能用于线程同步。关于你正在努力完成的事情的更多信息会很有帮助。谢谢,我的问题不是我是否想这样做,而是它是否可能。事实证明,是的,这是可能的。再次感谢。fcntl有多线程错误死锁检查(设计缺陷)。考虑这样的场景,两个进程都有两个线程。线程1类似于:for(;){fcntl_auto_lock(file1);}。线程2类似于:for(;){fcntl_auto_lock(file2);}。fcntl将返回EDEADLK(35),此处可以找到更多详细信息: