我的问题:在Linux(和FreeBsd,以及通常在UNIX中)是否可以/合法地从两个线程同时读取单个文件描述符?
我做了一些搜索,但是什么也没找到,尽管很多人都问类似的问题,关于同时读/写套接字fd(意思是在写其他线程时读,而不是在读其他线程时读)。我还阅读了一些手册页,但对我的问题没有明确的答案。
我为什么要问。我试图实现一个简单的程序,该程序可以计算stdin中的行数,例如wc -l。我实际上在测试自制的C ++ io引擎的开销,发现wc快了1.7倍。我修整了一些C ++,接近了wc速度,但没有达到。然后,我尝试了输入缓冲区的大小,对其进行了优化,但是wc显然要快一些。最后,我创建了2个线程,这些线程并行读取同一STDIN_FILENO,这最终比wc快!但是行数变得不正确...所以我认为读取时会产生一些垃圾,这是意外的。内核不关心读取什么进程吗?
编辑:我做了一些研究,发现只是直接调用通过syscall读取不会更改任何内容。内核代码似乎进行了一些同步处理,但是我不太了解(read_write.c)