TOP

PHP 源码学习之线程安全(五)
2017-10-10 11:57:32 】 浏览:10146
Tags:PHP 源码 习之 线程 安全

; \ } else { \ return array[TSRM_UNSHUFFLE_RSRC_ID(offset)]; \ }

就是根据传入 tsrm_tls_entry 和 storage 的数组下标 offset ,然后返回该全局变量在该线程的 storage数组中的地址。到这里就明白了在多线程中获取全局变量宏 TSRMG 宏定义了。

其实这在我们写扩展的时候会经常用到:

#define TSRMLS_D void ***tsrm_ls   /* 不带逗号,一般是唯一参数的时候,定义时用 */
#define TSRMLS_DC , TSRMLS_D       /* 也是定义时用,不过参数前面有其他参数,所以需要个逗号 */
#define TSRMLS_C tsrm_ls
#define TSRMLS_CC , TSRMLS_C

NOTICE 写扩展的时候可能很多同学都分不清楚到底用哪一个,通过宏展开我们可以看到,他们分别是带逗号和不带逗号,以及申明及调用,那么英语中“D"就是代表:Define,而 后面的"C"是 Comma,逗号,前面的"C"就是Call。

以上为ZTS模式下的定义,非ZTS模式下其定义全部为空。

参考资料

 

本文来源于:https://github.com/zhoumengkang/tipi/blob/master/book/chapt08/08-03-zend-thread-safe-in-php.markdown?spm=5176.100239.blogcont60787.4.Mvv5xg&file=08-03-zend-thread-safe-in-php.markdown


PHP 源码学习之线程安全(五) https://www.cppentry.com/bencandy.php?fid=85&id=129772

首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PHP mysqli_free_result()与mysql.. 下一篇WNMP集成环境下配置thinkPHP