日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux应用之----多线程

發布時間:2023/12/15 linux 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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和互斥鎖2a線程先鎖定互斥鎖1b線程先鎖定互斥鎖2,這時就出現了死鎖。此時我們可以使用函數pthread_mutex_trylock,它是函數pthread_mutex_lock的非阻塞版本,當它發現死鎖不可避免時,它會返回相應的信息?

另外還有條件變量和信號量。比較抽象,就不掌握了。

總結

以上是生活随笔為你收集整理的linux应用之----多线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。