是否可以在文件上使用fcntl()系統調用來實現線程/進程同步(而不是信號量)?fcntl()用於線程或進程同步?
回答
是的。 Unix fcntl鎖(和一般的文件系統資源)是系統範圍的,因此任何兩個執行線程(不管它們是否分離進程)都可以使用它們。這是不是一個好主意是依賴於上下文的。
謝謝,我的問題不是我是否想這樣做,但是否可能。事實證明,這是可能的。再次感謝。 – 2009-11-20 02:41:08
這是進程之間進行同步的一種方式,但如果你不想使用信號量,你可以使用進程共享的互斥體,如用在基於POSIX平臺PTHREAD_PROCESS_SHARED
屬性創建互斥量和條件變量(見pthread_mutexattr_setpshared()
和pthread_condattr_setpshared()
)。另一種選擇是使用基於事件的IPC(套接字等)機制,直到您定義的事件被解複用爲止(例如,通過select()
)。還有其他幾種基於共享內存的選項。
但是,由於您使用的是C++,因此我推薦使用C++框架,該框架極大地簡化了跨多個平臺的此類進程間同步,如boost.interprocess或ACE。
fcntl和flock不是用於線程,而是用於進程,所以它們不能用於線程同步。
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
- 1. 線程同步VS進程同步
- 2. Java或Android中不同線程/進程之間的同步?
- 3. 多線程,線程同步
- 4. 線程同步
- 5. 線程同步
- 6. 線程同步
- 7. 線程同步
- 8. 線程/同步
- 9. 線程同步
- 10. 同步線程
- 11. 線程同步
- 12. 線程同步
- 13. 線程同步 - 一個進程的最大線程數
- 14. 關於使用信號量進行線程同步的示例
- 15. python異步線程/進程
- 16. 線程或進程
- 17. 線程或異步?
- 18. 使用WINAPI同步線程
- 19. Python線程同步
- 20. 線程和同步
- 21. 線程和同步
- 22. .NET線程同步
- 23. 同步:ImageDownloader線程
- 24. 線程vs同步
- 25. Python線程同步
- 26. C#線程同步
- 27. 同步線程IllegalStateException
- 28. Java線程「同步」
- 29. 線程同步101
- 30. 線程同步:C
你爲什麼要這樣做?有關您想要完成的更多信息將會有所幫助。 – LnxPrgr3 2009-11-19 18:34:08