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