2009-11-19 43 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