跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:C++ 用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
C++ 编译器附带的所有库都是多线程安全的。如果需要生成多线程应用程序,或者需要将应用程序链接到多线程库,必须使用 –mt 选项编译和链接程序。此选项会将 –D_REENTRANT 传递给预处理程序,并按正确的顺序将 –l thread 链接到 ld。缺省情况下,-mt 选项可确保 libthread 在 libCrun 之前链接。推荐使用 —mt,这是指定宏和库的替代方式,它更加简单且不易出错。
可以通过使用 ldd 命令检查应用程序是否链接到 libthread:
example% CC -mt myprog.cc example% ldd a.out libm.so.1 => /usr/lib/libm.so.1 libCrun.so.1 => /usr/lib/libCrun.so.1 libthread.so.1 => /usr/lib/libthread.so.1 libc.so.1 => /usr/lib/libc.so.1 libdl.so.1 => /usr/lib/libdl.so.1
C++ 支持库 libCrun、libiostream 和 libCstd 是多线程安全的,但不是 async 安全的。因此,在多线程应用程序中,支持库中可用的函数不能用于信号处理程序中。这样做的话将导致死锁状态。
在多线程应用程序的信号处理程序中使用以下功能是不安全的:
iostream
new 和 delete 表达式
异常