linux程式設計

2021-08-30 08:47:23 字數 1448 閱讀 6075

多程序

unix/linux作業系統提供了乙個fork()系統呼叫,它非常特殊。

普通的函式呼叫,呼叫一次,返回一次,但是fork()呼叫一次,返回兩次,因為作業系統自動把當前程序(稱為父程序)複製了乙份(稱為子程序),然後,分別在父程序和子程序內返回。

子程序永遠返回0,而父程序返回子程序的id。

這樣做的理由是,乙個父程序可以fork出很多子程序,所以,父程序要記下每個子程序的id,而子程序只需要呼叫getppid()就可以拿到父程序的id。

程序間通訊

管道(pipe)、訊息佇列(posix)、共享記憶體、訊號(signals)、socket(首選tcp)。

程序間同步

互斥器(mutex)、訊號量、條件變數、讀寫鎖、檔案鎖。

多執行緒

多執行緒和多程序最大的不同在於,多程序中,同乙個變數,各自有乙份拷貝存在於每個程序中,互不影響,而多執行緒中,所有變數都由所有執行緒共享,所以,任何乙個變數都可以被任何乙個執行緒修改,因此,執行緒之間共享資料最大的危險在於多個執行緒同時改乙個變數,把內容給改亂了。

多執行緒同步

訊號量、互斥量

執行緒池的實現方案

一般執行緒池都必須具備下面幾個組成部分:

執行緒池管理器:用於建立並管理執行緒池

工作執行緒: 執行緒池中實際執行的執行緒

任務介面:將執行緒執行的任務抽象出來,形成任務介面。

任務佇列:執行執行緒。

cjob是所有的任務的基類,其提供乙個介面run,所有的任務類都必須從該類繼承,同時實現run方法。該方法中實現具體的任務邏輯。

cthread是linux中線程的包裝,其封裝了linux執行緒最經常使用的屬性和方法,它也是乙個抽象類,是所有執行緒類的基類,具有乙個介面run。

cworkerthread是實際被排程和執行的執行緒類,其從cthread繼承而來,實現了cthread中的run方法。

cthreadpool是執行緒池類,其負責儲存執行緒,釋放執行緒以及排程執行緒。

cthreadmanage是執行緒池與使用者的直接介面,其遮蔽了內部的具體實現。

cthreadmutex用於執行緒之間的互斥。

ccondition則是條件變數的封裝,用於執行緒之間的同步。

cthreadmanage直接跟客戶端打交道,其接受需要建立的執行緒初始個數,並接受客戶端提交的任務。這兒的任務是具體的非抽象的任務。

cthreadmanage的內部實際上呼叫的都是cthreadpool的相關操作。cthreadpool建立具體的執行緒,並把客戶端提交的任務分發給cworkerthread,cworkerthread實際執行具體的任務。

執行緒池通常適合下面的幾個場合:

(1)  單位時間內處理任務頻繁而且任務處理時間短

(2)  對實時性要求較高。

Linux程式設計

一 linux設計特點 多使用者 多個使用者可以同時登入,同一使用者可以登入多次 多工 同一程式可以有多個執行緒或程序併發執行 分時。1.manpage手冊頁,共8個部分,可用man ls命令檢視。要檢視某部分介紹,用man sectionnum。要檢視某個命令的解釋,用man commandnam...

Linux程式設計

linux和unix的最大的區別是,前者是開發源 的自由軟體,而後者是對源 實行智財權保護的傳統商業軟體。從最開始 unix作業系統就是在公共環境下建立成長的。他的建立不是由於市場的需求,而是由於渴望排除編制程式的障礙。最初擁有unix商標的at t最終使unix成為商業化產品。到了1991 年的1...

linux程式設計

檔案操作 s islnk st mode 是否是乙個連線.s isreg是否是乙個常規檔案.s isdir是否是乙個目錄s ischr是否是乙個字元設 備.s isblk是否是乙個塊裝置 s isfifo是否 是乙個fifo檔案.s issock是否是乙個socket檔案 man 2 stat st...