Linux环境下的多线程

1. 按照POSIX 1003.1c 标准编写的程序与Linuxthread 库相连接便可支持Linux平台上的多线程,在程序中需包含头文件pthread. h,在编译连接时使用命令:html

gcc -D -REENTRANT -lpthread xxx. c

  其中-REENTRANT宏使得相关库函数(如stdio.h、errno.h中函数) 是可重入的、线程安全的(thread-safe),-lpthread则意味着连接库目录下的libpthread.a或libpthread.so文件。  缓存

  在一个多线程程序里,默认状况下,只有一个errno变量供全部的线程共享。在一个线程准备获取刚才的错误代码时,该变量很容易被另外一个线程中的函数调用所改变。相似的问题还存在于fputs之类的函数中,这些函数一般用一个单独的全局性区域来缓存输出数据。安全

       为解决这个问题,须要使用可重入的例程。可重入代码能够被屡次调用而仍然工做正常。编写的多线程程序,经过定义宏_REENTRANT来告诉编译器咱们须要可重入功能,这个宏的定义必须出现于程序中的任何#include语句以前。多线程

       _REENTRANT为咱们作三件事情,而且作的很是优雅:函数

(1)它会对部分函数从新定义它们的可安全重入的版本,这些函数名字通常不会发生改变,只是会在函数名后面添加_r字符串,如函数名gethostbyname变成gethostbyname_r。.net

(2)stdio.h中原来以宏的形式实现的一些函数将变成可安全重入函数。线程

(3)在error.h中定义的变量error如今将成为一个函数调用,它可以以一种安全的多线程方式来获取真正的errno的值。nuxt

 

2. 分清 线程安全函数 信号安全函数  可重入函数的 区别。code

 

文章:htm

http://www.javashuo.com/article/p-opkpwevv-ky.html

 

https://blog.csdn.net/lidonghat/article/details/52881418

相关文章
相关标签/搜索