C语言多线程并行的利器之线程变量

线程变量

在C语言中,如果函数使用的变量或内存均为栈变量,则函数可以充分保证线程的并行执行,但栈变量的生命周期却很短,无法广泛适用于并行编程的指导建议!

如果你想每个线程使用的变量或存储区域,在内存分配上类似栈,每个线程使用时为独立内存,但变量生命周期又类似到静态变量可以长期存在,那么将可以在很大程度上避免全局变量或静态变量的线程安全问题,如果有这种需求,线程变量将是利器!

// linux platform
static __thread int s_abBuf[256];
void f()
{
//some code using s_abBuf
...
}

唯一存在的多线程弱点,就是不同函数,在同一个线程内的重入 问题,需要避免,其它将很方便!

 
 const char* formatTypeToStr(TypeVale a)
 {  
    static __thread abBuf[256];
    //第一次使用初始化,也能够
    
  //some code using sp_abBuf
  ...
  return abBuf;
 }
// invalid usage ,will print the last value in storage !!! 
printf("Type1 Name:%s",Type2 Name:%s\n", formatTypeToStr(type1), formatTypeToStr(type2))

另外一个线程变量使用上惯用法,线程变量不允许占用段内存区域过多。如果存在因为线程变量使用,而导致程序无法使用的异常,那么可以用变量的指针作为线程变量,但存储区域放入无限量供应的堆区!

 static __thread int* sp_abBuf;
 void f()
 {  
    //第一次使用初始化,也能够保证线程安全
    if(sp_abBuf == NULL)
    {
      sp_abBuf = malloc(BIG_SIZE);
    }
    
  //some code using sp_abBuf
  ...
 }

结束语

在c++中也对应提供了thread_local的变量声明类型,如果有对应多线程并行编程的使用场景,也可以尽情使用!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值