2.安装pthreads
cd /usr/local/src/
wget http://pecl.php.net/get/pthreads-2.0.5.tgz
tar zxvf pthreads-2.0.5.tgz
cd pthreads-2.0.5(进入这个目录。然后执行下面一条操作语句)
/usr/local/php5.5.12-zts/bin/phpize(这是一个操作语句,执行之后会出现configure)
./configure --with-php-config=/usr/local/php5.5.12-zts/bin/php-config
make
make install
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
测试代码:
<?php
/*
* 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
*/
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
);
?>
直接在网页没有输出,需要调用PHP脚本运行。
参照文章:
http://www.2cto.com/kf/201309/245093.html
http://blog.youkuaiyun.com/crz03128/article/details/25954441
编译了很久,做个记录。