首页 > 解决方案 > 使用静态类成员作为超级全局变量的php线程安全

问题描述

我想从我的所有脚本中访问我自己的超级全局变量,我正在使用静态类成员来实现这一点,但我担心 php 服务器为每个脚本文件和我的一些脚本创建一个单独的线程如果我的代码的关键部分使用互斥锁保护,我正在阅读或修改这些变量吗?

使用示例

SuperGlobals.php

class MySuperGlobals {
      public static $Variables=array("visited"=>array());

     }

索引.php

<?php

   include "SuperGlobals.php";
   array_push(MySuperGlobals::$Variables["visited"] ,"index");
   echo MySuperGlobals::$Variables["visited"][count(MySuperGlobals::$Variables["visited"])-1];//last element

?>

page1.php

<?php
    include "SuperGlobals.php";
    array_push(MySuperGlobals::$Variables["visited"] ,"page1");
    echo MySuperGlobals::$Variables["visited"][count(MySuperGlobals::$Variables["visited"])-1];//last element
?>

在上面的示例中,对于静态成员来说,array_push 是单独线程安全的(忽略 echo 的),如果我们想保护它,那么整个 push 和 echo 应该怎么做?我应该在类中创建一个静态互斥对象并锁定和解锁这些行吗?

标签: phpthread-safetymutexstatic-memberssuperglobals

解决方案


推荐阅读