Linux编程练习 --多线程1--线程创建
POSIX線程—輕量級進程,線程調度是由內核調度程序完成的,線程所消耗的系統資源比較少,相互通訊也比較容易。
多線程的優點:
1.資源消耗量少。我們知道,在Linux系統下,啟動一個新的進程必須分配給它獨立的地址空間,建立眾多的數據表來維護它的代碼段、堆棧段和數據段,這是一種"昂貴"的多任務工作方式。而運行于一個進程中的多個線程,它們彼此之間使用相同的地址空間,共享大部分數據,啟動一個線程所花費的空間遠遠小于啟動一個進程所花費的空間,而且,線程間彼此切換所需的時間也遠遠小于進程間切換所需要的時間。據統計,總的說來,一個進程的開銷大約是一個線程開銷的30倍左右,當然,在具體的系統上,這個數據可能會有較大的區別。
2.通信方便。對不同進程來說,它們具有獨立的數據空間,要進行數據的傳遞只能通過通信的方式進行,這種方式不僅費時,而且很不方便。線程則不然,由于同一進程下的線程之間共享數據空間,所以一個線程的數據可以直接為其它線程所用,這不僅快捷,而且方便。當然,數據的共享也帶來其他一些問題,有的變量不能同時被兩個線程所修改,有的子程序中聲明為static的數據更有可能給多線程程序帶來災難性的打擊,這些正是編寫多線程程序時最需要注意的地方。
應用多進程的應用程序具有以下優點:
1) 提高應用程序響應。這對圖形界面的程序尤其有意義,當一個操作耗時很長時,整個系統都會等待這個操作,此時程序不會響應鍵盤、鼠標、菜單的操作,而使用多線程技術,將耗時長的操作(time consuming)置于一個新的線程,可以避免這種尷尬的情況。
2) 使多CPU系統更加有效。操作系統會保證當線程數不大于CPU數目時,不同的線程運行于不同的CPU上。
3) 改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。
?
好了,看了多線程的特點后,馬上練習一下
需要的頭文件:pthread.h
線程標識符:pthread_t???????在頭文件/usr/include/bits/pthreadtypes.h中定義:
typedef??unsigned long int??pthread_t;
線程函數:
(1)extern int pthread_create __P ((pthread_t *__thread,//?指向線程標識符的指針
?__const pthread_attr_t *__attr,//?設置線程屬性
????????????????????????????????????void *(*__start_routine) (void *),//線程運行函數的起始地址
?void *__arg));//?運行函數的參數
當創建線程成功時,函數返回0,若不為0則說明創建線程失敗,常見的錯誤返回代碼為EAGAIN和EINVAL。前者表示系統限制創建新的線程,例如線程數目過多了;后者表示第二個參數代表的線程屬性值非法。創建線程成功后,新創建的線程則運行參數三和參數四確定的函數,原來的線程則繼續運行下一行代碼。
?
(2)#include <pthread.h>
extern void pthread_exit __P ((void *__retval)) //函數的返回代碼
(3)等待一個線程的結束
oNormal" style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt; text-align: left;" align="left">#include <pthread.h>
???????????????extern int pthread_join __P ((pthread_t __th, //被等待的線程標識符
void **__thread_return));//?一個用戶定義的指針,它可以用來存儲被等待線程的返回值
這個函數是一個線程阻塞的函數,調用它的函數將一直等待到被等待的線程結束為止,當函數返回時,被等待線程的資源被收回。
?
下面在linux環境下編寫 :
[cpp]?view plaincopy?
編譯:
$ gcc threadtest.c -lpthread -o threadtest
運行:
$ ./threadtest
好,運行結果如下:
This is pthread1!
This is pthread2!
This is pthread2!
This is pthread2!
This is pthread1!
This is pthread1!
main programme exit!
?
上面例子很清楚地看出各個線程間的運行情況
總結
以上是生活随笔為你收集整理的Linux编程练习 --多线程1--线程创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 购置税减半只是开胃菜!北京现代加码:买车
- 下一篇: Linux编程练习 --多线程5--信号