0

在 Windows 上,是否有任何简单的方法可以在多线程 C 代码中以独占方式(为我的软件读取和写入)锁定文件?我已经尝试过 LockFileEx,但它仅适用于进程之间,而不适用于线程(同一进程)。

注意:我的问题是我做了一个小文件服务器(多线程),当一个文件请求到来时,三分之一的“A”必须以独占方式访问请求的“file1.txt”,但如果另一个线程“ B”想要相同的“file1.txt”,它必须等待才能使用此文件。如果线程“A”使用 dwSharedMode 为“0”的 CreateFile() 来打开/创建“file1.txt”,确保只有它读取或打开此文件,如果线程“B”尝试打开“file1”,则会发生错误。文本”。现在线程“B”如何等待“file1.txt”?

4

3 回答 3

1

dwShareMode您可以通过设置为0in CreateFile()function以独占模式打开文件。

在此处阅读更多信息:http: //msdn.microsoft.com/en-us/library/windows/desktop/aa363874 (v=vs.85).aspx

于 2013-03-25T02:57:29.850 回答
1

我将您的问题理解为以下问题:如何为多线程组织对资源(文件)的访问(应该解决读者-作者问题)

如果您的资源应该在同一进程内操作的线程之间共享
使用同步原语critical_section(它比系统对象同步原语更有效,但仅适用于同一进程内的线程)
否则使用mutex

于 2013-03-25T03:21:36.870 回答
0

超薄读取器/写入器 (SRW) 锁

SRW 锁提供了两种线程可以访问共享资源的模式:

  • 共享模式,授予对多个读取器线程的共享只读访问权限,使它们能够同时从共享资源中读取数据。如果读取操作超过写入操作,则与临界区相比,这种并发性会提高性能和吞吐量。

  • 独占模式,一次授予对一个写入器线程的读/写访问权限。当以独占模式获得锁时,在写入者释放锁之前,没有其他线程可以访问共享资源。

于 2013-03-25T03:01:19.830 回答