Environment CentOS 6.3 64bit, php 5.4.5 pthreads need thread security environment, download the php installation package, unzip: tar zxvf php-5.4.5.tar.gz // name is not this I'm not sure, go to download and install myself :. /configure -- enable-zts -- prefix =/usr/local/php-zts make install. Then, install php of the thread-installed version to/usr/local/php-zts, currently, I do not know the impact of enabling thread security. Therefore, I have two test versions. Download and install pthreads: tar zxvf pthreads cd pthreads-0.0.45 // This article is the first stable version/usr/local/php-zts/bin/phpize. /configure -- with-php-config =/usr/local/php-zts/bin/php-configmakemake install/usr/local/php-zts/bin/php-I | grep "php. ini "find php. ini location, modify it to ext = pthreads. so is added in, because I already have php, and now the newly installed php. if the INI file does not exist, I got a pass ...... Some sample files in the pthreads-0.0.45/examples directory are more useful than the document. The online document cannot describe the problem at all. I modified one and executed it:
<? Php/** Sharing symbols 101 * @ NOTE Thread :: fetch was never authorized ded 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 = f Open ("php: // stdout", "w"); echo '9 '. chr (10);/** tell the waiting process we have created symbols and fetch will succeed */$ this-> synchronized (function () {$ this-> Policy () ;}); 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); adding this will not work normally. It's strange 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) {/** man Ual unserialize */case "objs": var_dump (unserialize ($ fetched); break; default: var_dump ($ fetched) ;}} printf ("\ n ");} /* define y the thread so it can destroy resource */$ thread-> synchronized (function ($ me) {$ me-> groovy () ;}, $ thread);?> /Usr/local/php-zts/bin/php Fetch. php result: 012367891045 $ thread-> sym: int (10245) $ thread-> arr: array (3) {[0] => string (1) "1" [1] => string (1) "2" [2] => string (1) "3"} $ thread-> obj: object (TestObject) #2 (1) {["val"] => string (7) "testval"} $ thread-> objs: object (TestObject) #2 (1) {["val"] => string (7) "testval"} $ thread-> res: resource (3) of type (stream) 11