php - 使用静态类成员作为超级全局变量的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 应该怎么做?我应该在类中创建一个静态互斥对象并锁定和解锁这些行吗?
解决方案
推荐阅读
- python - 在python中添加365天至今
- winapi - 如何在 win32 中使用 SetTextColor 更改文本 SetDlgItemText 的颜色?
- math - 我将使用“光线投射器”选择“对象”之一进行放大
- python - MNIST图像数据上的EM算法python
- java - 如何在不发送实体的完整 json 的情况下更新对象
- azure - Azure 事件网格出口限制
- python - 基于其他两个类/表自动填充由 sqlalchemy 类定义的表
- ios - UILabel 没有在 UIStackView 中使用 addArrangedView 呈现;使用 addSubView 渲染
- abap - 不存在日志数据。查看集群的问题
- javascript - 在 setState React 中使用参数作为对象的名称