关于线程安全与可重入性

关于线程安全与可重入性

ID:25533793

大小:48.18 KB

页数:3页

时间:2018-11-20

关于线程安全与可重入性_第1页
关于线程安全与可重入性_第2页
关于线程安全与可重入性_第3页
资源描述:

《关于线程安全与可重入性》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、关于线程安全与可重入性.txt两个男人追一个女人用情浅的会先放弃。两个女人追一个男人用情深的会先放弃。╰︶ ̄—你的话,我连标点符号都不信男女授受不亲,中国哪来13亿人口。关于线程安全与可重入性一个函数被称作“线程安全”的,当且仅当它被多个线程反复调用时,它会一直产生令人期待的正确的结果。反之为“线程不安全”函数,它主要有两种类型:(1)不保护共享变量的函数,包括全局变量和本地静态变量(static)。我们可以使用POSIX信号量加以解决:Sem_tmutex;Sem_init(&mutex,0,1);Sem_wait(&mutex);…………Sem

2、_post(&mutex);优点:简单易行;缺点:同步操作p、v将影响程序的执行时间。(2)返回指向静态变量的指针的函数,如gethostbyname,gethostbyaddr,inet_ntoa等等。我一般这样使用gethodtbyname:Structhostent*hostp;Hostp=gethostbyname(scorpion.cublog.cn);…………Gethostbyname将执行结果存放在自己的staticstructhostent变量中,并返回一个指向这个结构的指针。如果我们从并发线程中调用这个函数,那么将发生不可预料的结

3、果,正在被一个线程使用的结果,可能悄悄地被其它线程覆盖。解决办法:(a)、改写库函数gethostbyname,增加一个参数,将本地结构变量传入gethostbyname,如:Structhostenthost;Gethostbyname(&host,scorpion.cublog.cn);再使用host方可!(b)、改写库函数gethostbyname,不是返回指针,而是直接返回structhostent.缺点:structhostent结构较大,影响函数的效率。以上两种办法(a)、(b),要求修改库函数,基本上不可行!(c)、使用lock–an

4、d-copy技术,即定义自己的封装函数,通过调用它来取代直接使用gethostbyname.structhostent*gethostbyname_my(char*hostname){structhostent*shar,*unshar;unshar=malloc(sizeof(structhostent))sem_wait(&mutex);shar=gethosybyname(hostname);*unshar=*shar;srm_post(&mutex);returnunshar;}现在大多数unixlinux操作系统,提供了线程不安全函数的

5、可重入版本,如:gethostbyname_r。但是不同的系统可能接口不一样,所以建议不使用它们!还是使用我们自己的封装函数。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。