欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP 线程安全,多线程

程序员文章站 2022-03-03 17:04:42
...

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

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 ...

*/

classTestObject {

public$val;

}

classFetching extendsThread {

publicfunction 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= newTestObject();

$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= newFetching();

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 线程安全,多线程


直接在网页没有输出,需要调用PHP脚本运行。


参照文章:

http://www.2cto.com/kf/201309/245093.html

http://blog.csdn.net/crz03128/article/details/25954441


编译了很久,做个记录。