在Windows上,是否有任何简单的方法可以在多线程C代码中以独占方式(为我的软件读写)锁定文件?我已经尝试过LockFileEx但它只能在进程之间工作而不能用于线程(同一进程)。
注意:我的问题是我创建了一个小文件服务器(多线程),当一个文件请求到来时,一个“A”必须以独占方式访问所请求的“file1.txt”,但是如果另一个线程“B”想要使用此文件之前必须等待的“file1.txt”。如果线程“A”使用带有dwSharedMode的CreateFile()为“0”来打开/创建“file1.txt”,则确保只读取或打开此文件,如果线程“B”尝试打开“file1”,则会发生实际错误。文本”。现在线程“B”如何等待“file1.txt”?
答案 0 :(得分:1)
您可以在dwShareMode
功能中将0
设置为CreateFile()
,以独占模式打开文件。
在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/windows/desktop/aa363874(v=vs.85).aspx
答案 1 :(得分:1)
我理解你的问题如下:如何组织对多个线程的资源(文件)的访问(读者 - 写作者问题应该解决)。
如果您的资源应该共享在同一进程中运行的线程:
使用同步原语critical_section
(它比系统对象同步原语更有效,但仅适用于同一进程中的线程)
否则使用mutex
;
答案 2 :(得分:0)
Slim Reader/Writer (SRW) Locks
SRW锁提供两种模式,其中线程可以访问共享资源:
共享模式,它授予对多个读取器线程的共享只读访问权限,使其能够同时从共享资源中读取数据。如果读取操作超过写入操作,则与关键部分相比,此并发性可提高性能和吞吐量。
独占模式,一次授予对一个编写器线程的读/写访问权限。在独占模式下获取锁定后,在编写器释放锁定之前,没有其他线程可以访问共享资源。