为了账号安全,请及时绑定邮箱和手机立即绑定

如何在每个线程的PHP扩展中封装全局变量?

如何在每个线程的PHP扩展中封装全局变量?

PHP
慕工程0101907 2021-06-01 16:59:03
我开发了一些 PHP 扩展。此扩展必须与 pthread 一起使用。我遇到了一个问题,因为全局变量,全局声明(在 C 代码的顶部),它们可以从每个 PHP 线程访问。例如,我们有用 C 语言编写的简单 PHP 扩展代码:#include <php.h>int test_var;PHP_FUNCTION(set_var) {  test_var = 123;}PHP_FUNCTION(print_var) {  printf("%d", test_var);}如果我们在第一个 PHP 线程中运行以下代码:set_var();然后在第二个线程中运行以下 PHP 代码:print_var();第二个线程的输出将是 123。这意味着我必须非常小心地使用全局 C 变量。因为它可能会被覆盖并且我的脚本崩溃了。作为变体,我可以在函数内部定义变量,并将此变量从定义变量的函数传递给另一个函数。但是在某些情况下,当多个函数必须访问某个变量时,我无法做到这一点。有人可以告诉我一个好的做法吗?
查看完整描述

1 回答

?
跃然一笑

TA贡献1826条经验 获得超6个赞

使全局变量 thread-local 正在做:

_Thread_local int test_var; /* for C11 or higher */

对于其他版本的 C,这可能会:

thread_local int test_var;

或这个

__thread int test_var;


查看完整回答
反对 回复 2021-06-04
  • 1 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信