[PHP]红帽企业 Linux AS 3 发行注记
Copyright © 2003 Red Hat, Inc.
红帽企业 Linux 3 包括 Native POSIX Thread Library (NPTL),它是 Linux 的 POSIX 线程的新实现。该库提高了性能并增加了可缩放性。
该线程库被设计成与原有的 LinuxThreads 实现在二进制上兼容;不过,依赖于脱离 POSIX 标准的 LinuxThreads 实现之处的应用程序将需要被修正。值得注意的不同之处包括:
· 信号处理已从每线程信号处理改成 POSIX 进程信号处理。
· getpid() 在所有的线程中返回相同值。
· 如果使用了 vfork(),用 pthread_atfork 注册的线程处理程序就不会运行。
· 无管理线程。
使用 NPTL 时会遇到问题的已知应用程序包括:
- 版本 1.4.1 之前的 Sun JRE
- IBM JRE
如果某应用程序使用 NPTL 无法正确运行,它可以使用原有的 LinuxThreads 实现来运行,方法是设置以下的环境变量:
LD_ASSUME_KERNEL=<kernel-version>
可用的版本如下:
· 2.4.19 — 带有浮动堆栈的 Linuxthreads
· 2.4.19 — 没有浮动堆栈的 Linuxthreads
注意,使用 errno、h_errno、和 _res 的软件在它们被使用前必须包含(#include)恰当的头文件(依次为 errno.h、netdb.h、和 resolv.h)。不过,在软件被修正之前,您可以把 LD_ASSUME_KERNEL=2.4.19 用作绕行措施。
使用线程取消的多线程 C++ 程序可能需要通过 LD_ASSUME_KERNEL=2.4.19 这个环境变量设置来强制使用 LinuxThreads 库。否则,如果取消被执行了(既然生成的例外没有被捕获),程序就会异常终止。
新编写的使用 C 运行时间环境的 C++ 代码可能必须被调整来考虑线程取消因素。这可以通过以下方法之一来进行:
· 不把 C++ 函数标为 throw()(因此调用者就会知道一个例外可能会被投掷),编译带有例外的代码。这是默认的编译选项;用户不应该在编译的时候指定 -fno-exceptions。
· 在进入哪些调用可取消的 C 运行时间函数的函数前完全禁用取消。这可以通过使用以下的调用来做到:
pthread_setcancelstate (PTHREAD_CANCEL_DISABLE, &oldstate)
调用了 C 函数后,取消可以通过以下调用来重新被启用:
pthread_setcancelstate (oldstate, NULL)
注意:目前,取消会被执行,因此调用 pthread_setcancelstate() 的函数在编译时必须启用例外,而且必须被标为投掷例外。
[/PHP] |