亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C語言編程中借助pthreads庫進行多線程編程的示例

2020-05-23 14:12:54
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C語言編程中借助pthreads庫進行多線程編程的示例,文中的示例環境為Windows系統,需要的朋友可以參考下

運行之前需要做一些配置:

1.下載PTHREAD的WINDOWS開發包 pthreads-w32-2-4-0-release.exe(任何一個版本均可)

http://sourceware.org/pthreads-win32/ ,解壓到一個目錄。

2.找到include和lib文件夾,下面分別把它們添加到VC++6.0的頭文件路徑和靜態鏈接庫路徑下面:

a).Tools->Options,選擇Directory頁面,然后在Show directories for:中選擇Include files(默認) 在Directories中添加include的路徑。在Show directories for:中選擇Library files,

在Directories中添加lib的路徑。

b).Project->Settings,選擇Link頁面,然后將lib下的*.lib文件添加到Object/library Modules,

各lib文件以空格隔開。

c).將lib下的*.dll文件復制到工程目錄下,即根目錄。

我們進行多線程編程,可以有多種選擇,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK實現了的線程庫,如果你想讓你的程序有更多的移植性你最好是選擇POSIX中的Pthread函數庫,我的程序是在Linux下寫的,所以我使用了Pthread庫(是不是很傷心,我知道有不少人期待的是WindowsAPI的,好吧,有機會以后再講那個,現在先把這一系列專題寫完 ^_^)

如果你用的是LINUX/UNIX/MacOSX,那么我們已經可以開始了,如果你用的是WINDOWS,那么你需要從網站上下載PTHREAD的WINDOWS開發包,所幸他非常的小。網站地址是http://sourceware.org/pthreads-win32/

示例

先來看一個基本的例子:

 

 
  1. #include <pthread.h> 
  2. #include <iostream> 
  3.  
  4. using namespace std; 
  5.  
  6. void* tprocess1(void* args){ 
  7. while(1){ 
  8. cout << "tprocess1" << endl; 
  9. return NULL; 
  10.  
  11. void* tprocess2(void* args){ 
  12. while(1){ 
  13. cout << "tprocess2" << endl; 
  14. return NULL; 
  15.  
  16. int main(){ 
  17. pthread_t t1; 
  18. pthread_t t2; 
  19. pthread_create(&t1,NULL,tprocess1,NULL); 
  20. pthread_create(&t2,NULL,tprocess2,NULL); 
  21. pthread_join(t1,NULL); 
  22. return 0; 

在上面的例子中,我們首先加入了pthread.h文件包含,這是所以pthread多線程程序所必須的,接著是iostream我們進行輸入輸出時要用到,接著就是兩個函數的定義,這和普通的函數沒有什么區別,之所以寫成的

 

 
  1. void* tprocess1(void* args) 

這樣的形式,完全是為了迎合pthread_create函數的參數類型,你也可以不這樣定義,只要在調用pthread_create創建線程的時候強制轉換一下指針類型就可以了。

這兩個函數將被用做線程的執行體,也就是說在兩個線程里同時運行這兩個函數。

現在我們來看main函數,和pthread有關的調用都在這里了。

pthread_t是線程結構,用來保存線程相關數據,你也可以理解為是線程類型,聲明一個線程對象(變量)。

 

 
  1. pthread_t t1; 
  2. pthread_t t2; 

這里我們聲明了兩個線程變量t1,t2

 

 
  1. pthread_create(&t1,NULL,tprocess1,NULL); 
  2. pthread_create(&t2,NULL,tprocess2,NULL); 

這兩句非常重要,pthread_create用來創建線程并啟動,他的原型是

 

 
  1. int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); 

我們可以知道第一個參數是線程指針,第二參數是線程屬性指針,線程屬性pthread_attr_t用來指定線程優先級等屬性,一般的情況下,我們沒有必要修改,使用默認屬性來構造線程,所以這里一般取NULL,我們也是這樣做的,第三個參數是一個函數指針(函數指針?什么東西,沒聽說過啊?……巨暈,好嘛,你復習一下C或是C++指針那部分吧)就是線程要執行的代碼,這里我們分別要執行tprocess1 tprocess2就寫成了上面的樣子,這里這個函數指針的類型定義是返回一個空類型指針,接收一個空類型指針參數的函數指針,如果你的函數不是這個定義,那就可以直接轉化一下就可以了。

寫完這兩行代碼,兩個線程就已經執行起來了,但是如果你省略了

 

 
  1. pthread_join(t1,NULL); 

然后嘗試編譯運行程序的時候你會發現程序似乎什么也沒干就退出了,是的,那是因為程序的主線程退出的時候操作系統會關閉應用程序使用的所有資源,包括線程……所以在main函數結束前我們得想辦法讓程序停下來,pthread_join方法的功能就是等待線程結束,要等的線程就是第一個參數,程序會在這個地方停下來,直到線程結束,第二個參數用來接受線程函數的返回值,是void**類型的指針,如果沒有返回值,就直接設為NULL吧。

程序寫好了,我們怎么編譯運行它呢?

如果你使用的是Linux:

在終端里輸入

 

 
  1. g++ thread.cpp -othread -lpthread 
  2. ./thread 

就可以完成程序的編譯及運行

如果你用的是VC:

在工程屬性里加入開發包里的幾個庫文件

把那幾個DLL文件放到你的工程路徑里,也就是程序運行時候的工作路徑,這個在VC6和2005里似乎不太一樣,如果你不確定,那就直接放到SYSTEM32里吧。。。

下面的工作就非常簡單了

點運行,提示編譯,就確定,好了,結果出來了。。。

是不是感覺多線程如此的簡單,短短幾行代碼就搞定了,我想你已經可以寫出一個簡單的多線程程序了吧,呵呵,其實問題沒有這么簡單,多線程我們還要面對線程同步的問題,我會在下一個專題里給大家講到。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一级黄色片| 日韩av一区在线观看| 日韩在线观看网站| 色悠悠久久久久| 国产v综合ⅴ日韩v欧美大片| 精品国产91久久久久久老师| 亚洲黄在线观看| 欧美日韩亚洲高清| 日本电影亚洲天堂| 久久精品99国产精品酒店日本| 色婷婷**av毛片一区| 91手机视频在线观看| 伊是香蕉大人久久| 国产精品日韩欧美大师| 在线观看欧美www| 欧美电影在线免费观看网站| 日韩激情av在线播放| 亚洲精品一区二区网址| 国产精品狼人色视频一区| 国产精品久久久久久久久久| 日本精品一区二区三区在线| 欧美激情视频免费观看| 大量国产精品视频| 亚洲女同性videos| 欧美老妇交乱视频| 久久影视电视剧免费网站| 亚洲图片欧美日产| 97在线看福利| 欧美做受高潮1| 国产精品草莓在线免费观看| 亚洲视频国产视频| 国产精品吴梦梦| 日韩精品视频在线观看免费| 久久天堂电影网| 国产精品久久久久久久久影视| 久久久av亚洲男天堂| 国产精品jvid在线观看蜜臀| 欧美日韩一区二区三区在线免费观看| 日韩a**站在线观看| 日韩成人av网| 日韩欧美在线视频日韩欧美在线视频| 国产成人精品一区二区在线| 久久久久国产精品一区| 国产精品va在线播放| 欧美国产亚洲视频| 一区二区三区视频观看| 久久夜色精品国产欧美乱| 欧美日韩激情小视频| 欧美中文字幕视频在线观看| 亚洲国内精品在线| 日韩av影院在线观看| 欧美影院久久久| 欧美放荡办公室videos4k| 日韩av免费在线观看| 国产亚洲欧洲高清| 久久精品久久精品亚洲人| 51精品在线观看| 亚洲精品一区久久久久久| 欧美成人自拍视频| 亚洲xxxxx电影| 国产精品电影观看| 国产精品福利在线观看| 精品毛片三在线观看| 中文字幕日韩在线视频| 久久影院免费观看| 色www亚洲国产张柏芝| 欧美激情视频一区| 国产精品第一页在线| 欧美大片va欧美在线播放| 26uuu另类亚洲欧美日本老年| 38少妇精品导航| 亚洲色图美腿丝袜| 国产精品日韩久久久久| 精品在线小视频| 国产精品看片资源| 国产综合久久久久| 日韩欧美一区二区三区久久| 九色精品美女在线| 久久成人这里只有精品| 欧美一级视频免费在线观看| 九色成人免费视频| 日韩美女在线观看一区| 久久99精品久久久久久琪琪| 国产精品视频久久| 成人深夜直播免费观看| 久久精品电影网| 精品女厕一区二区三区| 日韩高清电影免费观看完整版| 亚洲精品免费一区二区三区| 国产脚交av在线一区二区| 欧美黑人国产人伦爽爽爽| 日韩av在线免费观看| 国产成人一区二区三区| 福利微拍一区二区| 国产精品27p| 国产精品美女主播在线观看纯欲| 亚洲一区免费网站| 奇门遁甲1982国语版免费观看高清| 久久久伊人欧美| 亚洲成成品网站| 日韩在线视频国产| 91久久久国产精品| 日韩在线观看免费网站| 九九久久国产精品| 色www亚洲国产张柏芝| 3344国产精品免费看| 亚洲精品一二区| 不卡av电影在线观看| 91精品国产99久久久久久| 麻豆精品精华液| 韩国v欧美v日本v亚洲| 成人免费网站在线观看| 欧洲日本亚洲国产区| 中文字幕国产精品| 国产aⅴ夜夜欢一区二区三区| 欧美激情在线视频二区| 亚洲精品欧美一区二区三区| 亚洲精品美女免费| 97精品伊人久久久大香线蕉| 最近2019中文字幕mv免费看| 国模视频一区二区三区| 久久91亚洲精品中文字幕奶水| 亚洲夜晚福利在线观看| www.日韩欧美| 国产丝袜精品视频| 日韩在线视频观看正片免费网站| 亚洲一区二区福利| 国产精品video| 日韩美女在线观看一区| 国产精品国产福利国产秒拍| 国产91九色视频| 久久躁日日躁aaaaxxxx| 欧美国产在线电影| 久久伊人精品视频| xxx成人少妇69| 大荫蒂欧美视频另类xxxx| 成人黄色av免费在线观看| 国产精品久久久久久av下载红粉| 在线视频亚洲欧美| 最近2019年中文视频免费在线观看| xvideos亚洲人网站| 国产亚洲欧美日韩一区二区| 亚洲精品一二区| 日韩国产高清视频在线| 大量国产精品视频| 日韩网站在线观看| 美女国内精品自产拍在线播放| 国产精品偷伦免费视频观看的| 日韩在线观看免费av| 在线成人激情黄色| 国产精品久久77777| 国产精品久久久久久久久男| 在线观看精品国产视频| 精品国内自产拍在线观看| 在线激情影院一区| 欧美在线免费视频| 欧美激情久久久久| 亚洲激情电影中文字幕| 亚洲美女免费精品视频在线观看| 国产91av在线| 在线日韩日本国产亚洲| 亚洲性xxxx| 热久久这里只有精品| 久久综合免费视频|