PHP 线程安全,多线程
3.添加扩展 php.ini添加 : extension=pthreads.so; 如果你是之前安装过php,那么, /usr/local/php-zts/bin/php -i|grep php.ini 这个语句帮你找到php.ini位置。 找出php.ini的位置,修改它把ext=pthreads.so加入进入进去,因为我原来就有php,现在新装的php
3.添加扩展
php.ini添加 : extension=pthreads.so;
如果你是之前安装过php,那么,/usr/local/php-zts/bin/php -i|grep "php.ini" 这个语句帮你找到php.ini位置。
找出php.ini的位置,修改它把ext=pthreads.so加入进入进去,因为我原来就有php,现在新装的php.ini文件不存在我就考了一个过去……
4.查看扩展是否安装成功
/usr/local/php5.5.12-zts/bin/php -i | grep -i pthreads
测试代码:
/*
*
Sharing symbols 101
*
@NOTE Thread::fetch was never included in a release and was superceeded by object handlers
*
pthreads allows read access to thread data from any context
pthreads
allows write access to thread data from any context
carry
on reading ...
work
in progress ...
*/
class
TestObject
{
public
$val
;
}
class
Fetching
extends
Thread
{
public
function
run(){
/*
*
of course ...
*/
$this
->sym
= 10245;
$this
->arr
=
array
(
"1"
,
"2"
,
"3"
);
echo
'6'
.
chr
(10);
/*
*
objects do work, no preparation needed ...
*
read/write objects isn't finalized ..
*
so do the dance to make it work ...
*/
$obj
=
new
TestObject();
$obj
->val
=
"testval"
;
$this
->obj
=
$obj
;
echo
'7'
.
chr
(10);
/*
*
will always work
*/
$this
->objs
= serialize(
$this
->obj);
echo
'8'
.
chr
(10);
/*
*
nooooooo
*/
$this
->res
=
fopen
(
"php://stdout"
,
"w"
);
echo
'9'
.
chr
(10);
/*
*
tell the waiting process we have created symbols and fetch will succeed
*/
$this
->synchronized(
function
(){
$this
->notify();
});
echo
'10'
.
chr
(10);
/*
wait for the process to be finished with the stream */
$this
->synchronized(
function
(){
$this
->wait();
});
echo
'11'
.
chr
(10);
}
}
echo
'0'
.
chr
(10);
$thread
=
new
Fetching();
echo
'1'
.
chr
(10);
$thread
->start();
//sleep(1);
加了这个就不能正常工作,真奇怪
echo
'2'
.
chr
(10);
$thread
->synchronized(
function
(
$me
){
echo
'3'
.
chr
(10);
$me
->wait();
echo
'4'
.
chr
(10);
},
$thread
);
echo
'5'
.
chr
(10);
/*
*
we just got notified that there are symbols waiting
*/
foreach
(
array
(
"sym"
,
"arr"
,
"obj"
,
"objs"
,
"res"
)
as
$symbol
){
printf(
"\$thread->%s:
"
,
$symbol
);
$fetched
=
$thread
->
$symbol
;
if
(
$fetched
)
{
switch
(
$symbol
){
/*
*
manual unserialize
*/
case
"objs"
:
var_dump(unserialize(
$fetched
));
break
;
default
:
var_dump(
$fetched
);
}
}
printf(
"\n"
);
}
/*
notify the thread so it can destroy resource */
$thread
->synchronized(
function
(
$me
){
$me
->notify();
},
$thread
);
?>
在命令框输入:/usr/local/php-zts/bin/php Fetch.php
直接在网页没有输出,需要调用PHP脚本运行。
参照文章:
http://www.2cto.com/kf/201309/245093.html
http://blog.csdn.net/crz03128/article/details/25954441
编译了很久,做个记录。
上一篇: 简述分配器的作用是什么?
下一篇: 简析怎么通过PHP类对整数数组进行排序