Linux下编写支持多线程的库
来源:互联网 发布:淘宝怎么看卖家信用 编辑:程序博客网 时间:2024/05/17 13:41
一个进程中,所有线程共享同一个地址空间。所以,如果一个变量是全局的和静态的,那么所有线程访问的是同一份。
一个可执行程序,由下面5部分组成:
- 代码段: 由程序的所有代码编译而成的二进制组成,一个进程只有一个副本,只读。
- 初始化数据段: 包含所有赋了初值的全局变量组成。
- 非初始化数据段:没有被赋初值的全局变量组成。
- 栈空间
- 堆空间
只有堆栈是每个线程独立地,其他三项都是共享的。
多个线程调用同一个库得到不同的结果,要么把各种参数都独立出来,通过参数传递;
还有一种方式是通过TLS(Thread Local Storage)来声明线程独立地变量实例。 每个线程有64个DWORDS Slots可用。
比如:
一个Log库,支持多个线程,每个线程可以设置log输出的文件,Log的级别等配置。
一种方式是在线程中通过参数把配置传递进去,这样就需要在库的所有接口中都传递参数,
就不可能有一些通用的函数,比如: log_debug、log_error…
另一种方式是,在Log库中,声明一个TLS 全局指针变量,该指针在每个线程中会有一个独立的实例。
在每个线程中,对变量进行赋值操作,后续就可以使用一些通用的接口,而不影响实际独立性。
参考:
http://www.longene.org/forum/viewtopic.php?f=8&t=3916
http://blog.chinaunix.net/uid-24611346-id-3193852.html
http://blog.csdn.net/dog250/article/details/7704898
http://blog.csdn.net/yusiguyuan/article/details/22938671
0 0
- Linux下编写支持多线程的库
- linux 下mysql多线程支持问题
- Linux下动态链接库的编写
- Linux下动态链接库的编写
- linux 下的C动态库编写
- linux下的多线程
- linux下的多线程
- linux下的多线程
- linux下的多线程
- linux下的多线程
- 编写守护进程下的多线程实例
- Lua协同(lua下多线程的编写)
- Linux 和 Xdmx 的分布式多线程支持
- Linux下makefile的编写
- linux下的makefile 编写
- Linux下makefile的编写
- Linux下Makefile的编写
- linux下makefile的编写
- 关于新用户第一次赠送金额的处理
- Ajax详解及其案例分析------如何获得Ajax对象,使用Ajax对象发送GET和POST请求,校验用户名,POST和GET请求时的乱码处理,实现级联的下拉列表
- java接口的一些小知识
- 面向对象的三大特性
- 单调队列实现与例题
- Linux下编写支持多线程的库
- Mysql 内连接、外连接、全连接和交叉连接
- jQuery UI 实例 - 自动完成(Autocomplete)
- Atitit RSA非对称加密原理与解决方案
- Swift中的required修饰符
- Codeforce 723A - The New Year: Meeting Friends
- Weiss-(DSAA - in C,2.12)最大子序列求和
- MySQL 之 count(*) 与 count(1)
- pyspark-combineByKey详解