作業系統Ubuntu(實驗三四)

2021-10-06 08:54:37 字數 2062 閱讀 9969

4._實驗四:使用訊號量進行互斥與同步

fork()函式用法解釋

個人觀點

#include

#include

int main (

)else

printf

("統計結果是: %d/n"

,count)

;return0;

}

當執行到**段fpid=fork(); 時,此時新建了乙個子程序,其直觀圖如下:

練習:

畫出流程圖

pthread.h的使用

建立兩個執行緒即函式son()和函式daughter();兩者執行順序隨機且同步

linux提供兩種訊號量:

核心訊號量:用於核心中資源共享控制

使用者態訊號量:主要包括posix訊號量和system v訊號量。其中posix訊號量分為兩類。

無名訊號量:主要用於執行緒間同步,也可用於程序間(由fork產生)同步。

有名訊號量:既可用於程序間同步,也可用於執行緒間同步。

posix有名訊號量主要包括:

sem_t*

sem_open

(const

char

*name,

int oflag, mode_t mode,

int value)

;//例如:建立乙個互斥訊號量mutex,初值為1即mutex = 1,訪問許可權為0666(我也不知道啥意思),

//如訊號量存在,則開啟之,如不存在,則建立

sem_t*

mutex

("mutex"

,o_create,

0666,1

);

①name: 檔名路徑,如』mysem』,會建立/dev/shm/sem.mysem

②oflag:o_create或o_create | o_excl

o_create:如訊號量存在,則開啟之,如不存在,則建立

o_create | o_excl:如訊號量已存在,則返回error

③mode:訊號量訪問許可權,如0666

④value:訊號量初始化值

int

sem_wait

(sem_t *sem)

測試指定的訊號量的值,相當於p操作

若sem > 0,則減1立刻返回;

若sem = 0,則睡眠直到sem > 0,此時立刻減1,然後返回

int

sem_post

(sem_t *sem)

釋放資源,相當於v操作,訊號量sem的值加1,喚醒正在等待該訊號量的程序/執行緒

int

sem_close

(sem_t *sem)

關閉有名訊號量

程序中,如果使用完訊號量,應使用該函式關閉有名訊號量

int

sem_unlink

(const

char

*name)

刪除系統中的訊號量

作業系統Ubuntu(實驗一二)

摘錄 1.5 建立檔案和目錄 1.6 刪除檔案和目錄rm 檢視目錄大小 2.1 編譯c程式 使用sudo i 進入管理員許可權 service xrdp restart 開啟埠 ctrl c 中斷當前活動。當你在csh中鍵入乙個不可識別的命令列 例如,ls 收到第2個提示符的時候,ctrl c也可以...

作業系統第三 四章作業

3.5 可以考慮將乙個就緒 掛起態的程序降低一定數量的優先順序,只有當就緒 掛起態在被降低優先順序後仍比最高優先順序的程序高時,才會被選做執行.4.2 對於使用者級執行緒來說,作業系統不能去讀寫程序內部的執行緒,它的排程是以程序為單位的.4.5 不會繼續執行.因為當程序退出時,會帶走 核心級執行緒,...

作業系統實驗

一 實驗目的 理解vi的三種執行模式及其切方法。學會使用vi的各種操作命令進行文字檔案的編輯。用vi編寫linux下c程式,會用gcc編譯。二 實驗環境 一台裝有linux的機器 這裡預設是red hat linux 9 系統裡面有gcc編譯器。三 實驗內容 寫出主要的內容 首先用合法使用者登入系統...