是否可以在文件上使用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