linux应用之----多线程
多線程編程
線程理論:線程(thread)技術早在上世紀60年代就已經提出來了,但真正應用到多線程操作系統當中是在80年代中期。
線程想比與進程的兩大優勢:一是創建和維護一個線程的開銷比創建和維護一個進程的開銷要小的多。另外一個時線程間的通信比進程快速高效的多。具體來說就是,不同的進程有獨立的進程空間,要進行數據傳輸必須依靠進程間的通信方式進行。這種方式不僅費時,而且很不方便。線程則不同,由于同一進程下的線程之間共享數據空間,所以一個線程的數據可以直接為其他線程所用。
Linux系統下的多線程遵循POSIX線程接口,稱為pthread。編寫linux下的多線程程序需要使用頭文件pthread.h.連接時需要使用庫pthread.a
頭文件????#include?<pthread.h>
創建線程??int?pthread_create(pthread_t?*tipd,const?pthread_attr_t?*attr,函數指針,void*arg?)
第一個參數用于存放線程ID,第二個參數是線程屬性,填NULL,函數指針是指要通過線程運行的函數,最后一個是該函數的參數,必須是void?*型的一個參數。
注意:因為pthread的庫不是linux系統的庫,所以在編譯是要指定?-lpthread。
線程返回?調用結束或者exit(整個進程也將推出)或者是pthread_exit(void?*return)
等待線程?pthread_join(pthread_t??id?,?void?**?return)
為了解決多線程的資源競爭問題,提出了幾種方法
互斥量???類型為:pthread_mutex_t。互斥量的使用,首先定義一個pthread_mutxe_t的變量x。然后通過函數?int?pthread_mutex_init(&x,NULL)來進行初始化。對于某段代碼,如果好幾個線程都會調用,那么在這段代碼前后加上:pthread_mutex_lock?(&mutex);在結尾處加上pthread_mutex_unlock?(&mutex);?那么這段代碼就被很好的保護了起來,每次只允許一個線程使用。如果這段代碼是訪問臨界資源的,那么就很好的保護了臨界資源。需要提出的是在使用互斥鎖的過程中很有可能會出現死鎖:兩個線程試圖同時占用兩個資源,并按不同的次序鎖定相應的互斥鎖,例如兩個線程都需要鎖定互斥鎖1和互斥鎖2,a線程先鎖定互斥鎖1,b線程先鎖定互斥鎖2,這時就出現了死鎖。此時我們可以使用函數pthread_mutex_trylock,它是函數pthread_mutex_lock的非阻塞版本,當它發現死鎖不可避免時,它會返回相應的信息?
另外還有條件變量和信號量。比較抽象,就不掌握了。
總結
以上是生活随笔為你收集整理的linux应用之----多线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是消费金融
- 下一篇: linux内核编译与内核模块