c-线程函数中的局部变量是否与线程局部变量相似



线程函数中的局部变量与线程局部变量相似吗?

假设我有下面的C代码片段,我的问题是线程函数中的变量CCD_;运行";类似于全局线程局部变量i?这是否意味着对它们的修改都是线程安全的?

#include <threads.h>
#include <stdio.h>
thread_local int i = 10;
int run(void* v) {
  int j = 10;
  i = 0;  // thread safe?
  j = 0;  // thread safe?
  printf("%dn%d", i, j);
  return thrd_success;
}
int main(void) {
#if !defined(__STDC_NO_THREADS__)
  thrd_t thread;  
  thrd_create(&thread, run, NULL);
  thrd_join(thread, NULL);
#endif
  return 0; 
}  

我的问题是线程函数中的变量j是否;运行";类似于全局线程局部变量i?

取决于你所说的";类似";。

这是否意味着对它们的修改都是线程安全的?

是的,修改ji是线程安全的1

主要区别在于i在线程的持续时间内是持久的(像全局的(,而j只在run运行时存在。

在您的程序中,run的寿命和线程的寿命(几乎(相同,但构造一个i的寿命比j0长得多并且跨多个函数使用的示例并不重要。


1如果您将ij的地址传递给另一个线程,那么它们本身都不是线程安全的,您需要同步访问,否则将出现数据竞争。

最新更新