gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 10:08:21 32 4
gpt4 key购买 nike

  • 我的问题:在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 fileassociated with the open file descriptor, fildes, into the bufferpointed to by buf. The behavior of multiple concurrent reads on thesame pipe, FIFO, or terminal device is unspecified.

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

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com