当前位置: 技术问答>linux和unix
支持多线程(多进程)的子程序(模块)应该具备哪些特点?
来源: 互联网 发布时间:2016-03-14
本文导语: 我要在Linux下用C语言写一个比较独立的模块,供别人调用,类似于一个GUI库、控件库,但是要求要支持多线程(多进程)。 设计这样的模块应该注意什么问题呢? 支持多线程(多进程)的模块都有什么特点吗? 应该如何...
我要在Linux下用C语言写一个比较独立的模块,供别人调用,类似于一个GUI库、控件库,但是要求要支持多线程(多进程)。
设计这样的模块应该注意什么问题呢?
支持多线程(多进程)的模块都有什么特点吗?
应该如何设计?如何测试?
谢谢。。。
设计这样的模块应该注意什么问题呢?
支持多线程(多进程)的模块都有什么特点吗?
应该如何设计?如何测试?
谢谢。。。
|
唔...,头一次做沙发,忍不住说两句。linux没用过,不过支持多线程的函数就是线程安全(Thread Safe),更准确的说是可重入(reenterable),就是说在多线程中,函数被一个线程调用未返回前又被另一个线程调用而不会造成访问冲突。这要求
1.函数使用堆栈传递参数和分配局部变量(对于有些编译器来说,会使用寄存器或为局部变量优化存储空间,这种方式是无法重入的)
2.不直接赋值给全局变量。用访问函数使用同步方式访问全局变量(这是个好的编程习惯)。
3.注意你调用的其他函数和库函数(这个问题一定要注意,我曾经折腾了好几天)是否是线程安全的或者是可重入的。
1.函数使用堆栈传递参数和分配局部变量(对于有些编译器来说,会使用寄存器或为局部变量优化存储空间,这种方式是无法重入的)
2.不直接赋值给全局变量。用访问函数使用同步方式访问全局变量(这是个好的编程习惯)。
3.注意你调用的其他函数和库函数(这个问题一定要注意,我曾经折腾了好几天)是否是线程安全的或者是可重入的。
|
楼上总结的不错.我就线程安全(Thread Safe)和可重入(reenterable)在多说几句.
看了好几本参考说,提到这两个概念,但都没说清楚二者的关系.我的理解是可重入(reenterable)是比线程安全(Thread Safe)更高层次的概念:
1. 可重入(reenterable)一定是比线程安全(Thread Safe);反之则不然
2. 可重入(reenterable)强调了模块或函数的可并发能力,可以由多个thread同时调用执行
3. 线程安全(Thread Safe)的模块或函数不一定就能可重入, 因为有可能内部用了mutex或者其它同步方式,从而限制了多个thread对此模块或函数的并发执行.
4. 尽量以可重入(reenterable)为实现目标来充分利用如今日益流行的多核硬件技术来提高执行效率.