![]() |
1
3
(重复我在帕尔蒙克斯说的话……)
但是,当然,lock()应该在c'tor中发生,unlock()应该在d'tor中发生,除了一次性的黑客攻击。 update:请注意,在子例程中初始化$mutex时有一个竞争条件(两个线程可以几乎同时第一次调用that())。您很可能希望在创建(额外的)线程之前初始化$mutex,但我不清楚“worker”apache mpm的详细信息以及如何轻松地实现这一点。如果有一些代码“提前”运行,只需从那里调用that()就可以消除竞争。 这都表明apr::threadmutex有一个更安全的接口:
注意autolock()获取对undef的引用将导致它在初始化$mutex时使用互斥锁来防止竞争。 |
![]() |
2
3
由于这个问题,mod_perl 2实际上处理%env散列的方式与mod_perl 1不同。在mod_perl中,1%env直接绑定到环境结构,因此更改%env会更改环境。在mod_perl 2中,%env散列是从environ填充的,但更改不会传回。 这意味着您不能再使用$env{tz}来调整时区,特别是在线程环境中。这个 Apache2::Localtime 模块将使它在非线程情况下工作(通过使用env::c),但在线程化的mpm中运行时,这将是一个坏消息。 mod_perl源代码(src/modules/perl/modperl_env.c)中有一些关于这个问题的注释:
|
![]() |
3
1
如果您使用的是Apache1.3,那么就不需要使用互斥锁。Apache1.3产生了许多工作进程,每个工作进程执行一个线程。在这种情况下,您可以编写:
将变量更改为
对于Apache2,我不知道它对fork和线程使用什么模型。如果它保持了分叉进程和每个进程有一个线程的相同方法,那么就可以了。 如果Apache2使用诚实到善良的真实线程,那么这超出了我的详细知识范围,但是我希望另一个可爱的StackOverflow人员能够提供帮助。 一切都很好,
|
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
BioRod · 我不能用Perl打印键和值 2 年前 |
![]() |
user17227456 · Perl CLI代码无法追加字符串行 2 年前 |
![]() |
LearnToBeBetter · 读取文件,搜索字符串,打印字符串 3 年前 |
![]() |
KJ7LNW · 一些波斯语文本的宽字符印刷,但其他文本则没有 3 年前 |
![]() |
con · 如何搜索大型数据结构并返回一系列给出特定值的键/数组? 3 年前 |
![]() |
Pranay Nanda · 使用regex解析许可证文件 7 年前 |