需求是这样的:
有一个方法funcA,返回正整数(该方法很耗时)。
有一个全局的static变量$a,初始值是0。每当从客户端来一个请求,就会先检查$a的大小
①如果$a大于0,则返回$a的值,同时将$a减1。该请求结束。
②如果$a小于等于0,则想办法判断是否已经有请求在调用funcA,
1.如果有,就等待 ,直到funcA执行完,然后执行①。
2.如果没有,就调用funcA,将funcA的返回值付给$a,然后重复①其中,红色的部分,不知道怎么实现。请大家帮帮忙。
有一个方法funcA,返回正整数(该方法很耗时)。
有一个全局的static变量$a,初始值是0。每当从客户端来一个请求,就会先检查$a的大小
①如果$a大于0,则返回$a的值,同时将$a减1。该请求结束。
②如果$a小于等于0,则想办法判断是否已经有请求在调用funcA,
1.如果有,就等待 ,直到funcA执行完,然后执行①。
2.如果没有,就调用funcA,将funcA的返回值付给$a,然后重复①其中,红色的部分,不知道怎么实现。请大家帮帮忙。
if($a){
//某些操作
}else{
sleep(1);//睡眠
}
}//思路,具体可能还需要一些其他的操作
/*************/
这个【已经有请求】该怎么理解啊 ?同一个请求的话,进入函数置全局flag为0 离开函数置1 sleep轮询这个flag的状态就可以知道函数是否执行完成
谢谢你的回复啊。
是【只要执行一次那么所有的客户端公用那一次】。
session的用法,不是每个用户单独一个session吗?所有人共享一个session吗?
我刚学PHP不太熟悉,请给讲讲吧。另外,js+ajax+setTimeout怎么实现我问题中的红字的部分呢?
^ ^!
这个忘记了,不错session每个客户端的都不同,不过可以存在文件中(如果数据库中不方便存取),至于setTimeout<script type="text/javascript">
var sto;
function fun(){
/*
//这里进行ajax想服务端请求的操作(请求$a的值),下面是例子,不比较真,只是个思路
/**
* url是向服务器请求的地址(例如www.xxx.com/index.php)
* data是向服务器发送的数据(例如{"username": "zhangsan", "age": 20})
* 后面那个function是回调函数(也就是向服务器请求回来后执行的收尾操作),括号中的server_return_data则是服务端返回给客户端的数据
*/
$.post(url, data, function(server_return_data){
//一些操作
});
*/
sto = setTimeout("fun()", 1000);//1秒钟执行一次fun()方法(也就是自调用)
}
fun();//开启//php服务端你就看着来吧,大体思路(js+ajax+setTimeout)就是这样了
</script><div id="parent_id">
<span id="child_id_1">好哈哈<a href="javascript: void(0)" onclick="del('child_id_1')">删除</a></span>
</div>
php 并不存在“全局”的变量,如不借助第三方(文件、数据库、共享内存)将无法实现
首先, 是关于你提出的问题, php每个请求是独立运行的, 所谓全局是每个请求内部的全局, 如唠叨哥说的, 不存在你说的这种全局.
然后, 关于共享内存, 共享内存是可以通过一定手段随便用的.
当你开辟一块共享内存的时候, 你是需要传递一个key进去做标记的, 比如使用system v的shm_attach($key[, $memsize, [$perm]]).
所以, 只要你的$key没有别别人用就一切ok的.另外, 你这种需求, 其实用apc的内存缓存或memcache这类产品实现比较简单, 使用共享内存我总觉得需要控制的东西会麻烦一些....
谢谢回复。
因为我看网上有人说如果更新很频繁,用apc会有意想不到的问题。
所以考虑用共享内存。
apc我之后再试一下。对于共享内存,怎么就能知道我的key有没有被别人用?
有没有看当前已经占用的所有key的方法?
或者,有没有哪些key是系统固定要用的?等待回复