multithreading - 从两个线程同时读取文件描述符

标签 multithreading posix file-descriptor

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

  • 编辑:我做了一些研究,发现只是直接通过syscall调用read不会更改任何内容。内核代码似乎进行了一些同步处理,但是我不太了解(read_write.c)

    最佳答案

    这是未定义的行为POSIX
    说:

    The read() function shall attempt to read nbyte bytes from the file associated with the open file descriptor, fildes, into the buffer pointed to by buf. The behavior of multiple concurrent reads on the same pipe, FIFO, or terminal device is unspecified.

    关于multithreading - 从两个线程同时读取文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057737/

    相关文章:

    javascript - 如何在表单提交中实现线程

    c - `asprintf` 是线程安全的吗?

    python - 如何将这 2 个日期/时间列转换为 1 个?

    c - 为什么在 Linux 中使用 select

    multithreading - Delphi:如何从 idHTTPServer.OnCommandGet 方法在主线程中执行过程

    linux - 如何在 Linux 中从命令行杀死一个进程及其所有线程?

    c - 使用 mmap API 时内存映射长度的意义是什么?

    linux - 奇怪的 POSIX 信号量行为(卡在 Linux 上的 sem_wait 上)

    c - 手动获取Linux文件描述符表信息

    Linux 中的 C 程序读取作为终端参数传递的文件描述符