php session 读写锁
php session 读写锁
先看一个样例,功能:
1.点击页面中一个button,ajax运行php,php中用session记录运行到哪一步。
2.使用ajax轮询还有一个php,获取session中数据,输出运行到哪一步。
session.html 调用php运行,并输出运行到第几步
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<title> session lock </title>
</head> <body>
<input type="button" value="handle" onclick="handle()">
<div id="result"></div>
<script type="text/javascript">
function handle(){
$.get("handle.php"); // 运行handle // 每500毫秒请求,获取运行到第几步
var et = setInterval(function(){
$.get("getstep.php",
function(data){
$('#result').html('当前运行:' + data + '<br>');
if(data=='complete'){
clearInterval(et);
}
}
);
},500);
}
</script> </body>
</html>
handle.php 运行并记录运行到第几步
<?php
session_start();
$_SESSION['step'] = '';
$n = 1;
while($n<=10){
$_SESSION['step'] = $n;
sleep(1);
$n++;
}
$_SESSION['step'] = 'complete';
? >
getstep.php 获取运行到第几步
<?php
session_start();
echo isset($_SESSION['step'])? $_SESSION['step'] : '';
? >
运行时发现,并非每一步返回,而是等待10秒后直接返回complete。
当运行session_start()后,session会被锁住。直到页面运行完毕。
因此在页面运行其间。对sesssion进行写操作,仅仅会保存在内存中。并不会写入session文件。
而对session进行读取,则须要等待。直到session锁解开才干读取到。
我们能够使用session_write_close()把数据写入session文件并结束session进程。这样就不须要等待页面运行完毕,也能获取到运行到哪一步。
但这样有个问题。就是运行完sesssion_write_close()后。对session的不论什么写操作都不起作用。由于session进程已经结束。
因此须要再写session时。在前面加上session_start()
session_start — Start new or resume existing session
session_write_close — Write session data and end session
handle.php 按下面改动,就能获取到运行到哪一步
<?php
session_start();
$_SESSION['step'] = '';
$n = 1;
while($n<=10){
$_SESSION['step'] = $n;
session_write_close(); // 将数据写入session文件,并结束session进程
session_start(); // 又一次创建session进程
sleep(1);
$n++;
}
$_SESSION['step'] = 'complete';
?>
php session 读写锁的更多相关文章
- 【php】session读写锁
事件:a文件中操作$_SESSION['start'] = 'yes'; sleep(100); 休眠100s 在这休眠的时间段中,b文件操作$_SESSION['start'] = 'no'; 结 ...
- 技术笔记:Delphi多线程应用读写锁
在多线程应用中锁是一个很简单又很复杂的技术,之所以要用到锁是因为在多进程/线程环境下,一段代码可能会被同时访问到,如果这段代码涉及到了共享资源(数据)就需要保证数据的正确性.也就是所谓的线程安全.之前 ...
- java多线程-读写锁
Java5 在 java.util.concurrent 包中已经包含了读写锁.尽管如此,我们还是应该了解其实现背后的原理. 读/写锁的 Java 实现(Read / Write Lock Java ...
- 让C#轻松实现读写锁分离
ReaderWriterLockSlim 类 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问. 使用 ReaderWriterLockSlim 来保护由多个线程读取但每次只采用一 ...
- C#读写锁ReaderWriterLockSlim的使用
读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁.在C#中,推荐使用ReaderWriterLockSlim类来完成读写锁的功能. 某些场合下,对 ...
- 可重入锁 公平锁 读写锁、CLH队列、CLH队列锁、自旋锁、排队自旋锁、MCS锁、CLH锁
1.可重入锁 如果锁具备可重入性,则称作为可重入锁. ========================================== (转)可重入和不可重入 2011-10-04 21:38 这 ...
- 用读写锁三句代码解决多线程并发写入文件 z
C#使用读写锁三句代码简单解决多线程并发写入文件时提示“文件正在由另一进程使用,因此该进程无法访问此文件”的问题 在开发程序的过程中,难免少不了写入错误日志这个关键功能.实现这个功能,可以选择使用第三 ...
- 锁的封装 读写锁、lock
最近由于项目上面建议使用读写锁,而去除常见的lock锁.然后就按照需求封装了下锁.以简化锁的使用.但是开发C#的童鞋都知道lock关键字用起太方便了,但是lock关键字不支持超时处理.很无奈,为了实现 ...
- Java多线程13:读写锁和两种同步方式的对比
读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务 ...
随机推荐
- 扔鸡蛋问题具体解释(Egg Dropping Puzzle)
经典的动态规划问题,题设是这种: 假设你有2颗鸡蛋,和一栋36层高的楼,如今你想知道在哪一层楼之下,鸡蛋不会被摔碎,应该怎样用最少的測试次数对于不论什么答案楼层都可以使问题得到解决. 假设你从某一层楼 ...
- JNDI 什么
JNDI是 Java 命名与文件夹接口(Java Naming and Directory Interface).在J2EE规范中是重要的规范之中的一个,不少专家觉得,没有透彻理解JNDI的意义和作用 ...
- 加入指数(IOS开发)
该指数是用来协助查询. 原则上: - 索引的标题是不完全一样的标题显示: - 指数应该具有一定的代表性,它可表示一组数据: - 假设索引列表视图.在一般情况下不再使用扩展视图. (easy指向) 会又 ...
- linux下查找某个文件
参考http://blog.csdn.net/gray13/article/details/6365654 一.通过文件名查找法: 举例说明,假设你忘记了httpd.conf这个文件在系统的哪个目录 ...
- C,C++中的static
在C和C++中,static都有两种基本的含义,并且这两种含义经常是互相有冲突的: 1) 在固定的地址上分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次 函数调用时在堆栈上产生的.这也是 ...
- uva 11396Claw Decomposotion(二分图判定)
题目大意:给出一个简单无向图,每一个点的度为3.推断是否能将此图分解成若干爪的形式.使得每条边都仅仅出如今唯一的爪中. (点能够多次出如今爪中) 这道题实质上就是问这个图是否为二分图,dfs判定 ...
- 2015华为德州扑克入境摘要——软体project
直到6一个月2号下午12时00,华为长达一个月的德州扑克锦标赛落下帷幕也被认为是. 我们的团队一直共同拥有3民,间.一个同学(吴)负责算法设计,一个同学(宋)负责分析消息,而我负责的实现框架设计和详细 ...
- Sliverlight之 画刷
1,5种画刷 (见Project15) (1)TextBlock控件中的Forground和BackGround属性是一个什么对象?它在前台的完整的写法是什么?(实际是.net做了一个转换,可以直接写 ...
- ios pop 折叠动画
今天写了一个很有趣的电影太,我们可以去githoub下载. 这部动画是高级写作,我参考了它.而凝视,我希望你能看的懂. 各种动画.事实上,一些不起眼的开始.我也只是摸索. 我希望有更多的交流.[ ...
- MyReport报表引擎2.1.0.0新功能
支持简单的四则运算样例1:算总分,简单连加 样例2:算平均分.除非和加法混合(可以识别先乘除后加减,不支持小括号优先运算) 新增行号函数 直接生成行号 新增多种格式化设置修复数个已发现的Bug.优化代 ...