是否有 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"
未定义的行为意味着:任何事情都可能发生。
您不太可能观察到 abc
或 123
以外的任何东西,但上述所有情况都有可能发生。 1a2
的条件特别不可能,但它 可以 发生。
其他不太可能的可能性:111
、231
、aca
等。要了解这些可能性的原因,请阅读 this article。
如果有 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"
未定义的行为意味着:任何事情都可能发生。
您不太可能观察到 abc
或 123
以外的任何东西,但上述所有情况都有可能发生。 1a2
的条件特别不可能,但它 可以 发生。
其他不太可能的可能性:111
、231
、aca
等。要了解这些可能性的原因,请阅读 this article。