如果有n 個執行緒在執行read(uniqe_file[k], buffer, sizeof(buffer)) (k=1..n) (從unistd.h讀取)是否有可能在執行緒被讀取之后buffer的內容完成后,是否因各種檔案中的值組合而搞砸了?
例如:
n = 2
緩沖區是一個字符陣列
unique_file[1] 包含“abc”
unique_file[2] 包含“123”
那么,緩沖區最后是否可以包含“a2c”或“12c”之類的東西,甚至更糟像“1a2”這樣的情況?
而且,你能解釋一下可能出現的情況嗎?
uj5u.com熱心網友回復:
2 個或多個執行緒從不同檔案讀取到同一個緩沖區是否存在競爭條件?
是的:嘗試寫入相同位元組的兩個執行緒根據定義是競爭條件。生成的程式會執行未定義的行為。
最后,緩沖區可以包含“a2c”或“12c”之類的內容,甚至更糟的情況,例如“1a2”
未定義的行為意味著:任何事情都可能發生。
除了abc或 之外123,您不太可能觀察到任何其他內容,但上述所有情況都有可能發生。1a2特別是的條件極不可能發生,但它可能發生。
其他不太可能的可能性:111、231、aca等。要了解這些可能性的原因,請閱讀這篇文章。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399906.html
下一篇:std::counting_semaphore<LeastMaxValue>中的LeastMaxValue是什么?
