我有一個守護程序,它接受套接字連接並根據連接的性質讀取或寫入一組動態文件。因爲我的守護進程是多線程的,所以可能存在相同的文件可能被多個線程寫入。由於我的文件列表是動態的,並且不是固定的,我不確定如何讓一個線程不會碰到另一個線程。出於性能方面的考慮,我希望線程能夠同時寫入不同的文件,而不是同時寫入不同的文件。線程安全多文件寫入
其他問題建議使用互斥鎖,但我不完全清楚在這種情況下互斥鎖將如何幫助 - 文件列表是動態的,只有線程已知。
在這種情況下使用文件鎖定是否合適?如果是這樣,那麼如何以線程安全的方式實現文件鎖定?
無論如何,你需要對每個文件進行互斥訪問 - 你可以用Matthew PK的「文件代理」概念來做到這一點,或者甚至只是一個從(絕對)文件名到互斥量的散列表(顯然是修改散列表本身也應該使用互斥量序列化)。 – 2011-02-15 00:34:35
@Conrad Meyer:散列`st_dev` /`st_ino`組合可能比文件名更好,因爲與實際上唯一標識文件的文件名不同。 – caf 2011-02-15 05:27:33