在同一时间从2个或更多不同的线程使用相同的文件描述符时,是否有问题?pread;线程安全与否?
回答
pread
本身是线程安全的问题,因为它不是在list of unsafe functions。所以称它是安全的。
真正的问题是:如果您同时从同一文件读取(不一定来自两个线程,而且来自两个进程),会发生什么情况。
对此,specification说:
-
多个并发的行为读取同一管道,FIFO,或终端装置是不确定的。
请注意,它没有提到普通文件。无论如何,这个位仅与
read
有关,因为pread
不能用于不可查看的文件。 -
I/O旨在对普通文件和管道以及FIFO进行原子操作。
但是这是来自非规范部分,所以你的操作系统可能会做不同的。例如,如果你从两个线程读取并且有一个并发写入,你可能会在你的两个读缓冲区中得到不同的写入片段。但是这种问题并不是特定于多线程的。
也很高兴知道,在某些情况下
的read()将阻塞调用线程
不是过程,只是线程。而
已封锁不得阻止任何畅通线程的线程[...]从最终使得向前进步
由于我们使用相同的fd,我们必须绑定一个锁,否则会在文件描述符中混合来自两个pread的数据。 因此是有在做这个
这不是4汉。回答时请使用英文语法和拼写,以便即使不是你的'兄弟'的人也能理解你。 – RedX 2011-03-01 14:37:43
这个答案是错误的。 'pread'的全部目的是指定你想要读取的位置,而其他线程/进程产生的位置变化不会影响你的读取。请注意,这只适用于普通文件和其他可搜索设备,而不是管道/ ttys /套接字/等。 – 2011-04-13 15:50:15
- 1. Spliterator:线程安全与否?
- 2. AppKit线程安全与否?
- 3. 是否mysql_insert_id线程安全?
- 4. 是否log4j线程安全?
- 5. NSPasteboard是否线程安全?
- 6. RegExp.MatchString是否线程安全?
- 7. SeekableStream是否线程安全?
- 8. 线程是否表示线程安全?
- 9. 部分线程安全是否使Java类线程安全?
- 10. 线程安全与SSL + NIO
- 11. 线程安全与字典
- 12. 进程线程是否安全?
- 13. 线程安全
- 14. 线程安全
- 15. 线程安全
- 16. 线程安全
- 17. 线程安全
- 18. 线程安全
- 19. 线程安全
- 20. 此代码是否线程安全?我怎样才能使它线程安全?
- 21. 存储在线程安全集合线程中的对象是否安全?
- 22. concurrentMap.keySet()。toArray()线程是否安全?
- 23. 这个类是否线程安全?
- 24. Android中的java.util.Observable是否线程安全?
- 25. glibc是否执行fprintf()线程安全?
- 26. 这段代码是否线程安全?
- 27. 复制是否线程安全?
- 28. .NET模块是否线程安全?
- 29. C#委托是否线程安全?
- 30. ValueStack容器是否线程安全?
好问题,坏的答案.. – 2011-04-13 15:50:39