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

相關文章
相關標籤/搜索