windows c webserver上的独占锁文件

Posted

技术标签:

【中文标题】windows c webserver上的独占锁文件【英文标题】:exclusive lock file on windows c webserver 【发布时间】:2013-03-12 13:14:12 【问题描述】:

我正在 Windows 上用 C 语言编写一个(非常小的)网络服务器。 我在读取和写入文件时都需要独占锁定文件,我已经阅读了有关锁定等的 msdn 文档,并且我找到了具有 OVERLAPPED 结构和 Event hEvent 的函数 LockFileEx,我还阅读了关于它们如何工作,但问题是: - 在Web服务器中,我们有很多文件,当一个线程锁定例如文件“test.txt”(排他锁)时,因为有这个文件的请求,我如何同步另一个想要获得锁的线程在同一个文件上?

谢谢。

【问题讨论】:

使用锁将您的请求同步到文件而不是锁定文件 【参考方案1】:

看看互斥对象的使用。他们应该为你解决这个问题。

需要访问锁文件的线程可以为其请求锁并排队。当前线程完成后,它会释放它的锁,并为下一个请求线程授予锁。

【讨论】:

好的,但是这样我需要为每个线程想要打开的文件设置一个互斥锁?如果是的话,那么我需要将所有互斥锁存储在内存中吗?对吗? 嗯......你不应该首先需要一个锁,除非文件是可写的或在服务器读取它以传递给客户端时受到更改。否则,没有理由要求锁定只读文件。也就是说,是与否……这取决于应用程序。您可以为每个目录、每个服务或任何数量的其他优化使用互斥锁,但这是由设计和应用程序驱动的。 是的,问题是每个文件都需要独占访问权限。 好的...这是一个纯 C 应用程序,还是一个 C++ 应用程序?如果您使用 C++,我建议使用 STL::map 容器来管理互斥锁...文件名上的键,值是互斥锁。否则,请使用类似的 C 构造或容器库。 这是一个纯 C 控制台应用程序

以上是关于windows c webserver上的独占锁文件的主要内容,如果未能解决你的问题,请参考以下文章

获取独占进程句柄

C++——WebServer服务器项目

Mahout 上的 K-means 返回非独占集群

基于windows api实现的共享锁/独占锁

[WebServer] Windows操作系统下 Tomcat 服务器运行 PHP 的环境配置

c_cpp esp8266-webserver.ino