2009-11-19 42 views

回答

6

是的。 Unix fcntl锁(和一般的文件系统资源)是系统范围的,因此任何两个执行线程(不管它们是否分离进程)都可以使用它们。这是不是一个好主意是依赖于上下文的。

+0

谢谢,我的问题不是我是否想这样做,但是否可能。事实证明,这是可能的。再次感谢。 – 2009-11-20 02:41:08

1

这是进程之间进行同步的一种方式,但如果你不想使用信号量,你可以使用进程共享的互斥体,如用在基于POSIX平台PTHREAD_PROCESS_SHARED属性创建互斥量和条件变量(见pthread_mutexattr_setpshared()pthread_condattr_setpshared() )。另一种选择是使用基于事件的IPC(套接字等)机制,直到您定义的事件被解复用为止(例如,通过select())。还有其他几种基于共享内存的选项。

但是,由于您使用的是C++,因此我推荐使用C++框架,该框架极大地简化了跨多个平台的此类进程间同步,如boost.interprocessACE

-1

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

+0

fcntl具有多线程虚假死锁检查(设计缺陷)。想想这种情况,两个进程都有两个线程。线程1看起来像:for(;;){fcntl_auto_lock(file1);}。线程2看起来像:for(;;){fcntl_auto_lock(file2);}。 fcntl将返回EDEADLK(35) 在这里可以找到更多的细节: https://bugzilla.mozilla.org/show_bug.cgi?id=62457#c5 – alpha 2015-01-08 08:41:09