是否有 2 个或更多线程从不同文件读取到同一缓冲区的竞争条件?

Is there any race condition for 2 or more threads doing read from different files into the same buffer?

如果有 n 个线程在执行 read(uniqe_file[k], buffer, sizeof(buffer)) (k=1..n) (read from unistd.h) 的内容有没有可能buffer,在线程完成后,是否被来自不同文件的值的组合弄乱了?

例如:
n = 2
缓冲区是一个字符数组
unique_file[1] 包含“abc”
unique_file[2] 包含“123”
那么,缓冲区最后是否可以包含诸如“a2c”或“12c”或更糟糕的情况,如“1a2”?

而且,你能解释一下可能出现的情况吗?

Is there any race condition for 2 or more threads doing read from different files into the same buffer?

是:两个线程试图写入相同的字节是竞争条件根据定义。生成的程序执行未定义的行为。

can buffer contain, at the end, something like "a2c", or "12c" or even worse cases like "1a2"

未定义的行为意味着:任何事情都可能发生。

您不太可能观察到 abc123 以外的任何东西,但上述所有情况都有可能发生。 1a2 的条件特别不可能,但它 可以 发生。

其他不太可能的可能性:111231aca 等。要了解这些可能性的原因,请阅读 this article