gpt4 book ai didi

c - 在 c99 中使用 __thread

转载 作者:太空狗 更新时间:2023-10-29 15:24:59 26 4
gpt4 key购买 nike

我想使用 __thread 存储类将一些变量定义为线程特定的。但是三个问题让我犹豫不决:

  1. 它真的是c99的标准吗?或者更重要的是,编译器支持有多好?
  2. 是否会在每个线程中初始化变量?
  3. 非多线程程序是否将它们视为普通老式全局变量?

最佳答案

回答您的具体问题:

  1. 不,它不是 C99 的一部分。您不会在 n1256.pdf (C99+TC1/2/3) 或原始 C99 标准中的任何地方找到它。
  2. 是的,__thread 变量在每个新线程中都以其初始化值开始。
  3. 从程序行为的角度来看,线程局部存储类变量的行为与非多线程程序中的普通全局变量几乎相同。但是,它们确实会产生更多的运行时成本(内存和启动时间),并且可能存在线程局部变量的大小和数量限制的问题。所有这些都相当复杂,并且取决于您的程序是静态链接还是动态链接以及变量是驻留在主程序还是共享库中...

在我看来,除了实现 C/POSIX(例如 errno 等)之外,线程本地存储类实际上并不是很有用。它几乎是避免以上下文指针或类似形式干净地传递必要状态的拐杖。您可能认为它对于解决像 qsort 这样不采用​​上下文指针的损坏接口(interface)可能很有用,但不幸的是,不能保证 qsort 会调用比较函数在调用 qsort 的同一个线程中。它可能会分解作业并在多个线程中运行它。大多数其他接口(interface)也是如此,在这些接口(interface)中,这种变通方法是可能的。

关于c - 在 c99 中使用 __thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6869391/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com