freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

和尚挑水問題課程設(shè)計-文庫吧

2025-05-13 22:28 本頁面


【正文】 到水缸中 ” 表示小和尚 將 1 桶水倒入水缸中。通過觀察輸出語句,可 以發(fā)現(xiàn)執(zhí)行過程是否發(fā)成沖突。 使用 Linux 的信號量機(jī)制,編寫解決和尚挑水問題的代碼。 要求給出編譯所用到的 makefile 文件。 2 2 準(zhǔn)備工作 硬件及軟件需要 gcc 編譯器 vim 編輯器 了解 信號量 及信號量的 系統(tǒng)調(diào)用函數(shù): 信號量定義 最簡單的信號量是一個只有 0 與 1 兩個值的變量,二值信號量。這是最為通常的形式。具有多個正數(shù)值的信號量被稱之為通用信號量。在本章的其余部分,我們將會討論二值信號量。 P 與 V 的定義出奇的簡單。假定我們有一個信號量變 量 sv,兩個操作定義如下: P(sv) 如果 sv 大于 0,減小 sv。如果 sv 為 0,掛起這個進(jìn)程的執(zhí)行。 V(sv) 如果有進(jìn)程被掛起等待 sv,使其恢復(fù)執(zhí)行。如果沒有進(jìn)行被掛起等待 sv,增加 sv。 信號量的另一個理解方式就是當(dāng)臨界區(qū)可用時信號量變量 sv為 true,當(dāng)臨界區(qū)忙時信號量變量被 P(sv)減小,從而變?yōu)?false,當(dāng)臨界區(qū)再次可用時被 V(sv)增加。注意,簡單的具有一個我們可以減小或是增加的通常變量并不足夠,因?yàn)槲覀儾荒苡?C, C++或是其他的編程語言來表述生成信號,進(jìn)行原子測試來確定變量是否為 true,如果是則將其變?yōu)?false。這就是使得信號量操作特殊的地方。 3 信號量函數(shù)定義如下: include sys/ intsemctl(intsem_id, intsem_num, int mand, ...)。 intsemget(key_t key, intnum_sems, intsem_flags)。 intsemop(intsem_id, structsembuf *sem_ops, size_tnum_sem_ops)。 事實(shí)上,為了獲得我們特定操作所需要的 define 定義,我們需要在包含 sys/ 文件之前通常需要包含 sys/ 與sys/ 文件。而在某些情況下,這并不是必須的。 因?yàn)槲覀儠来瘟私饷恳粋€函數(shù),記住,這些函數(shù)的設(shè)計是用于操作信號量值數(shù)組的,從而會使用其操作向比單個信號量所需要的操作更為復(fù)雜。 注意, key 的作用類似于一個文件名,因?yàn)樗硎境绦蛞苍S會使用或是合作所用的資源。相類似的,由 semget 所返回的并且為其他的共享內(nèi)存函數(shù)所用的標(biāo)識符與由 fopen 函數(shù)所返回的FILE *十分相似,因?yàn)樗贿M(jìn)程用來訪問共享文 件。而且與文件類似,不同的進(jìn)程會有不同的信號量標(biāo)識符,盡管他們指向相同的信號量。 key 與標(biāo)識符的用法對于在這里所討論的所有 IPC 程序都是通用的,盡管每一個程序會使用獨(dú)立的 key 與標(biāo)識符。 信號量集得創(chuàng)建與打開 semget() semget 函數(shù)創(chuàng)建一個新的信號量或是獲得一個已存在的信號量鍵值。 調(diào)用 原型 : int semget(key_t key,int num_sems,int 4 sem_flags)。 第一個參數(shù) key 是一個用來允許不相關(guān)的進(jìn)程訪問相同信號量的整數(shù)值。所有的信號量是為不同的程序通過提 供一個 key 來間接訪問的,對于每一個信號量系統(tǒng)生成一個信號量標(biāo)識符。信號量鍵值只可以由 semget 獲得,所有其他的信號量函數(shù)所用的信號量標(biāo)識符都是由 semget 所返回的。 還有一個特殊的信號量 key 值, IPC_PRIVATE(通常為 0),其作用是創(chuàng)建一個只有創(chuàng)建進(jìn)程可以訪問的信號量。這通常并沒有有用的目的,而幸運(yùn)的是,因?yàn)樵谀承?Linux 系統(tǒng)上,手冊頁將IPC_PRIVATE 并沒有阻止其他的進(jìn)程訪問信號量作為一個 bug 列出。 num_sems 參數(shù)是所需要的信號量數(shù)目。這個值通??偸?1。 sem_flags 參數(shù)是一個標(biāo)記集合,與 open 函數(shù)的標(biāo)記十分類似。低九位是信號的權(quán)限,其作用與文件權(quán)限類似。另外,這些標(biāo)記可以與 IPC_CREAT 進(jìn)行或操作來創(chuàng)建新的信號量。設(shè)置IPC_CREAT 標(biāo)記并且指定一個已經(jīng)存在的信號量鍵值并不是一個錯誤。如果不需要, IPC_CREAT 標(biāo)記只是被簡單的忽略。我們可以使用 IPC_CREAT 與 IPC_EXCL 的組合來保證我們可以獲得一個新的,唯一的信號量。如果這個信號量已經(jīng)存在,則會返回一個錯誤。 如果成功, semget 函數(shù)會返回一個正數(shù);這是用于其他信號量函數(shù)的標(biāo)識符。如果 失敗,則會返回 1。 信號量的操作 semop() 函數(shù) semop 用來改變信號量的值: 調(diào)用原型: int semop(int sem_id,struct sembuf*semops, 5 size_tnum_sem_ops)。 第一個參數(shù), sem_id,是由 semget 函數(shù)所返回的信號量標(biāo)識符。 第二個參數(shù), sem_ops,是一個指向結(jié)構(gòu)數(shù)組的指針,其中的每一個結(jié)構(gòu)至少包含下列成員: structsembuf { short sem_num。 short sem_op。 short sem_flg。 } 第一個成員, sem_num,是信號量數(shù)目,通常為 0,除非我們正在使用一個信號量數(shù)組。 sem_op 成員是信號量的變化量值。(我們可以以任何量改變信號量值,而不只是 1)通常情況下中使用兩個值, 1 是我們的 P 操作,用來等待一個信號量變得可用,而 +1是我們的 V 操作,用來通知一個信號量可用。 最后一個成員, sem_flg,通常設(shè)置為 SEM_UNDO。這會使得操作系統(tǒng)跟蹤當(dāng)前進(jìn)程對信號量所做的改變,而且如果進(jìn)程終止而沒有釋放這個信號量,如果信號量為這個進(jìn)程所占有,這個標(biāo)記可以使得 操作系統(tǒng)自動釋放這個信號量。將 sem_flg 設(shè)置為SEM_UNDO 是一個好習(xí)慣,除非我們需要不同的行為。如果我們確實(shí)變我們需要一個不同的值而不是 SEM_UNDO,一致性是十分重要的,否則我們就會變得十分迷惑,當(dāng)我們的進(jìn)程退出時,內(nèi)核是否會嘗試清理我們的信號量。 semop 的所用動作會同時作用,從而避免多個信號量的使用所引起的競爭條件。 6 信號量的控制 semctl() semctl 函數(shù)允許信號量信息的直接控制 調(diào) 用 原 型 : int semctl(int sem_id,int sem_num,int mand,...)。 第一個參數(shù), sem_i
點(diǎn)擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1