【发布时间】:2011-02-24 16:11:40
【问题描述】:
阅读一些关于 PHP 锁定的文章。
他们都,主要是直接到http://php.net/manual/en/function.flock.php。
本页讨论的是在硬盘上打开文件!!
真的是这样吗?我的意思是,这使得锁定非常昂贵 - 这意味着每次我想锁定我都必须访问硬盘)=
可以再用一个令人愉快的消息来安慰我吗?
编辑:
由于我在这里得到了一些回复,我想问这个;
我的脚本只能由一个线程运行,还是由多个线程运行?因为如果它是一个,那么我显然不需要互斥锁。有简洁的答案吗?
我到底想要做什么
ircmaxell 提问。
故事是这样的:
我有两个 ftp 服务器。我希望能够在我的网站上显示有多少在线用户在线。
所以,我认为这些 ftp 服务器会将它们的统计信息“发布”到某个 PHP 脚本页面。我们假设这个页面的 URL 是“http://mydomain.com/update.php”。
在网站首页(“http://mydomain.com/index.php”)我会显示累计统计(在线用户)。
就是这样。
我的问题是我不确定,当一个 ftp 服务器更新他的统计数据而另一个也这样做时,信息是否会混淆。
就像多线程时一样;两个线程同时增加一些“int”变量。除非您在它们之间进行同步,否则它不会按预期发生。
那么,我会有问题吗?是的,不是的,也许吧?
可能的解决方案
苦苦思索了一整天,我在这里有个想法,希望你给出你的意见。
如前所述,这些 ftp 服务器将每 60 秒发布一次他们的统计信息。
我正在考虑使用此文件“stats.php”。
它将包含在 ftp 服务器转到的更新脚本(“update.php”)和访问者看到有多少用户在线的“index.php”页面中。
现在,当 ftp 服务器更新时,“update.php”处的脚本将使用新的累积统计信息修改“stats.php”。
首先它将读取“stats.php”中包含的统计信息,然后累积,然后重写该文件。
如果我没记错的话,PHP 会检测到文件(“stats.php”)被更改并加载新文件。对吗?
【问题讨论】:
-
PHP 是否支持线程?查看 PHP API,我看不到任何与线程相关的内容...
-
出于某种原因,我认为 PHP 支持线程,它会同时为多个客户端执行相同的脚本。
-
所以我有一个静态变量,它将保存一些数据,这些数据由多个来源更新并提供给多个客户端。这可能同时发生,因此我需要某种方式来同步。
-
@tloach,PHP 是一种语言。它可以通过其扩展库支持所有内容。
标签: php mutex mutual-exclusion