多工通訊下可能的死鎖問題及總結

2021-05-21 21:23:58 字數 733 閱讀 9765

首先介紹一篇vxworks下多工通訊機制的文章:

以前遇到死鎖問題,僅侷限於查詢訊號量巢狀,總是將死鎖侷限於多訊號量的使用,而往往忽視了最根本的問題,死鎖產生的原因在於資源,資源短缺,資源互斥。因為這個原因,在分析死鎖時也應該考慮訊號量與管道,訊息佇列之間可能因為爭奪資源而導致的阻塞。

然後對訊號量做個總結:

1,概述

vxworks中提供了三種訊號量,二進位制訊號量(sembcreate),互斥訊號量(semmcreate),和計數訊號量(semccreate)。那麼這三種訊號量分別有什麼特點呢?

二進位制訊號量:速度最快,最常用,是完成互斥,同步操作的最佳方式;

互斥訊號量:對二進位制訊號量在互斥上進行優化,具有優先順序繼承,刪除保護和遞迴訪問的特性;

計數訊號量:可記錄semgive()的次數,可監視同一資源上的多個例項。

訊號量操作的常用函式:

semtake();

semgive();

semflush();將所有等待該訊號量的任務喚醒;但並不會影響該二進位制訊號量所處的狀態,它只是清空了所有阻塞在該訊號量上的任務佇列。

中斷服務程式不能呼叫semgive函式。

2,二進位制訊號量使用說明

二進位制訊號量是用於互斥還是同步與其初始狀態關係密切。互斥操作一般將其初始化為可用,而同步操作則將其初始化為不可用。

Linux下多工間通訊和同步 訊息佇列

訊息佇列簡稱為佇列.訊息佇列就是一些訊息的列表.使用者可以在訊息佇列中新增訊息和讀取訊息等.從這點上看,訊息佇列具有一定的fifo特性,但是它可以實現訊息的隨機查詢,比fifo具有更大的優勢.同時,這些訊息又是存在於核心中的,由 佇列id 來標識.訊息佇列的實現包括建立或開啟訊息佇列,新增訊息,讀取...

43 Python 多工程式設計 程序間的通訊

在記憶體中開闢一段記憶體空間 形成管道結構。管道對多個程序可見,程序可以對管道進行讀寫操作 from multiprocessing import pipe fd1,fd2 pipe duplex true 功能 建立乙個管道 引數 預設為雙向管道,如果設定為false,則為單向管道 返回值 對於雙...

Linux命令列方式下的多工

linux是多使用者多工的作業系統,但是在命令列方式下如何體現linux多工的特性呢?首先就是 符號,任何命令後面帶上 符號都將以後臺方式執行,這樣在執行需要很長時間的任務時就不用幹等著了。但是有時候忘記敲入 或一開始不知道需要很長時間怎麼辦?沒關係,可以輸入ctrl z將當前任務在後台掛起,這時就...