我有一个守护程序,它接受套接字连接并根据连接的性质读取或写入一组动态文件。因为我的守护进程是多线程的,所以可能存在相同的文件可能被多个线程写入。由于我的文件列表是动态的,并且不是固定的,我不确定如何让一个线程不会碰到另一个线程。出于性能方面的考虑,我希望线程能够同时写入不同的文件,而不是同时写入不同的文件。线程安全多文件写入
其他问题建议使用互斥锁,但我不完全清楚在这种情况下互斥锁将如何帮助 - 文件列表是动态的,只有线程已知。
在这种情况下使用文件锁定是否合适?如果是这样,那么如何以线程安全的方式实现文件锁定?
无论如何,你需要对每个文件进行互斥访问 - 你可以用Matthew PK的“文件代理”概念来做到这一点,或者甚至只是一个从(绝对)文件名到互斥量的散列表(显然是修改散列表本身也应该使用互斥量序列化)。 – 2011-02-15 00:34:35
@Conrad Meyer:散列`st_dev` /`st_ino`组合可能比文件名更好,因为与实际上唯一标识文件的文件名不同。 – caf 2011-02-15 05:27:33