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的变量声明类型,如果有对应多线程并行编程的使用场景,也可以尽情使用!
C语言多线程并行的利器之线程变量相关推荐
- 易语言多线程启动方式许可证显示线程信息
通过创建许可证,来显示线程的启动信息,便于了解线程情况. 511遇见易语言多线程大漠多线程 代码: .版本 2 .支持库 EThread.子程序 子程序1 .参数 参数 .局部变量 n编辑框2.内容 ...
- 易语言多线程任务分配让不同的线程账号执行不同的多个任务
多线程,我们更多是用来让不同的线程做相同的事情,如果让不同的线程执行不同的任务,并且每个线程任务的数量也不一样,还可以自由的添加任何数量的任务,那么下面的教程解决了这个问题,包括多线程分配单个不同的任 ...
- 易语言多线程大漠多线程进程线程多线程
进程-线程-多线程 1.进程(process) 狭义定义:进程就是一段程序的执行过程 简单的来讲进程的概念主要有两点: 第一,进程是一个实体.每一个进程都有它自己的地址空间,一般情况下,包括文本区域( ...
- linux下c语言线程传参数,【linux】C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...
C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0 本贴问题,之前已经提问过一次,当时已经解决了,原贴在这里https://segmentfault.com/q/1 ...
- 易语言多线程封装线程启动返回句柄
封装多线程模块-线程启动 • 1.CreateThread • 2.线程_启动_句柄() • 3.线程_启动_逻辑() • 4.线程句柄 • 5.线程ID • 6.易语言SHCreateThread ...
- 易语言多线程Api封装线程挂起恢复销毁
封装多线程模块-api-线程的挂起和恢复销毁 强制杀死或挂起线程会导致线程正在获取的锁资源无法释放:如果正在操作一块公共内存,可能会导致公共内存被破坏. 一.SuspendThread 在实际环境中, ...
- 易语言多线程大漠多线程脚本主副线程
在大漠多线程模板中,脚本副线程的作用主要是一个监控线程,可以监控游戏窗口是否存在,游戏是否卡屏,是否掉线,当然你可以用来进行游戏里的其他检测监控. 511遇见易语言多线程大漠多线程 大漠多线程主副线程 ...
- 易语言多线程封装线程启动优先权设置
线程启动-设置优先级 1.SetThreadPriority 2.ResumeThread 模块源码: .子程序 线程_启动_优先权, 整数型, 公开, 返回线程句柄,必须用 线程_关闭_句柄()关闭 ...
- 易语言多线程Api封装线程等待CPU优化
API-线程等待CPU优化 用到的API 1.MsgWaitForMultipleObjects 2.WaitForSingleObject 3.SetThreadAffinityMask 4.Set ...
最新文章
- Python 2.7 学习笔记 内置语句、函数、标准库
- pat天梯赛L2-025. 分而治之
- html鼠标悬停区域拉伸,html – :将鼠标悬停在具有边框半径的div上
- ubuntu安装时发现GPT分区表,无法安装问题
- [原]openstack-kilo--issue(十八) Error parsing template file: Template format version not found.
- 吴恩达深度学习 —— 4.3 核对矩阵的维数
- 如何使用STVP_CmdLine.exe
- 【Python量化】蒙特卡洛模拟法进行期权定价
- docker 安装Mysql并设置自启动
- 毕索大学计算机科学怎么样,毕索大学的计算机硕士如何
- 学习笔记——共阳数码管的动态显示
- 水下SLAM论文!!!
- proftpd 530 Login incorrect
- 【运筹优化】元启发式算法详解:模拟退火算法(Simulated Annealing,SA)+ 案例讲解代码实战
- 企业微信视频教程(Java标准版)-翟东平-专题视频课程
- 并发编程之Disruptor框架介绍和高阶运用
- python求素数因子_Python入门教程: 素数判断与素因子分解
- Android自定义之仿360Root大师水纹效果
- 90后小伙用果酱画画:花鸟鱼虫活灵活现(图)
- 电子商务html语言及特点,南开18秋学期(1703)《电子商务网页制作》在线作业答案...