[PHP-users 32349] Re: スレッドとstatic変数の関係について

kanonbell kanonbell.sky @ gmail.com
2007年 6月 29日 (金) 23:55:43 JST


こんばんは。

>  プロセス間で干渉する事は絶対にありえません。
> なぜセッション関数があるのかを考えてみてください。

長谷川さんはWindows環境だし、「スレッド」って言ってるので
マルチスレッド環境でのstatic変数の挙動に疑問を持っているのだと思いますよ。
多分C/C++でのマルチスレッドアプリケーションの開発経験がおありなんじゃないでしょうか。
そもそもPHPでstatic使わないし、あまり深く考えたことは私もありませんが。。

ちなみにセッションの存在は、HTTPがステートレスなために同一クライアントからの
リクエストを識別できないからでしょう。

> > b).static変数は、リクエスト内で共有されるものである。
> >     (ということは、もう$GLOBALSは必要とされないというこ
> > とですか?)

ミワさんが示してくださったポインタみる限りスコープの問題が残るので、
$GLOBALSの代わりにはならないみたいですね。
あくまで何回も回す関数の値の保持に使うためのものって感じなのかな。

> > c).「PHPの一部の拡張モジュールはスレッドセーフではない
> > 為・・・」
> >     とマニュアルに記載されている為、?状態です。
> >     ただ単に、static変数はスレッドセーフということなので
> > すか?

static変数については分かりませんが、(内部で)インスタンス変数とかがんがん
使っちゃってるモジュールがあるんでしょうかね。
まああんまり気にすることはないと思います。
正直スレッドとかの考え方は、少なくともPHPでは捨てたほうがいいような。。


PHP-users メーリングリストの案内