-qtls (-ftls-model)
适用的调用
选项 | xlc (编译 C) | xlC (编译 C++) | xlclang(编译 C) | xlclang++(编译 C++) |
---|---|---|---|---|
-qtls | ✓ | ✓ | ✓ | ✓ |
-ftls-model | ✓ | ✓ |
注: 此表中仅列出典型调用。 对于所有基本调用及其等效特殊调用,您可以参阅 编译器调用的完整列表 。
类别
等效编译指示
无。
用途
启用 __thread
存储类说明符的识别,该说明符指定要分配给线程本地存储器的变量; 并指定要使用的线程本地存储器模型。
当此选项生效时,使用 __thread
存储类说明符标记的任何变量都将被视为多线程应用程序中每个线程的本地变量。 在运行时,将为访问该变量的每个线程创建该变量的副本,并在该线程终止时将其销毁。 与可用于并行化应用程序的其他高级构造一样,线程本地存储可防止对全局数据的竞争条件,而无需对线程进行低级别同步。
子选项允许您指定线程本地存储模型,这些模型提供了更好的性能,但对其适用性的限制更大。
语法
缺省值
-qtls=unsupported
指定不带子选项的 -qtls 等同于指定 -qtls=default。
-ftls-model 的缺省设置与 -qtls的缺省设置相同。
参数
- 不支持
- 无法识别
__thread
关键字,并且未启用线程本地存储器。 此子选项等同于 -qnotls。 - 缺省值 (仅适用于 qtls)
- 根据 -qpic 选项的设置使用相应的模型,该选项确定是否生成与位置无关的代码。 当 -qpic 生效时,此子选项将生成 -qtls=global-dynamic。 当 -qnopic 生效时,此子选项将导致 -qtls=initial-exec (缺省情况下-qpic 生效)。
- 全局动态
- 此模型是最一般的模型,可用于所有线程局部变量。
- 初始执行
- 此模型提供比全局动态或本地动态模型更好的性能,并且可用于动态装入的模块中定义的线程局部变量,前提是这些模块与可执行文件同时装入。 即,仅当未通过
dlopen
装入的模块中定义了所有线程局部变量时,才能使用此参数。 - 本地动态
- 此模型提供比全局动态模型更好的性能,并且可用于动态装入的模块中定义的线程局部变量。 但是,仅当对线程局部变量的所有引用都包含在定义变量的同一模块中时,才能使用此参数。
- 本地执行
- 此模型提供所有模型的最佳性能,但仅当所有线程局部变量都由主可执行文件定义和引用时,才能使用此模型。
预定义的宏
无。