操作系統:線程間同步之事件集

? ? ? ? 事件集是線程間同步的機制之一,一個事件集可以包含多個事件,利用事件集可以完成一對多、多對多的線程間同步。

目錄

一、事件集舉例說明

二、事件集工作機制

三、RT-Thread為實例說明

四、事件集的應用場合


一、事件集舉例說明

以坐公交車為例:

? ? ? ? ①P1坐公交去某地,只有一個公交可以到達目的地,等到該公交即可出發。

? ? ? ? ②P1坐公交去某地,有三種公交都可以到達目的地,等到其中任意一輛即刻出發。

? ? ? ? ③P1約另一個人P2去某地視為線程,將“公交到達公交站”、“同伴P2到達公交站”視為事件的發生,情況①是特定事件環喚醒線程;情況②是任意單個事件喚醒線程;情況③是多個事件同時發生才喚醒線程。

二、事件集工作機制

? ? ? ? 事件集主要用于線程間的同步,與信號量不同,它的特點是可以實現一對多,多對多的同步。即一個線程與多個的關系可設置為:其中任意一個事件喚醒線程,或幾個事件都到達后才喚醒線程進行后續的處理;同樣,事件也可以是多個線程同步多個事件。這種多個事件的集合可以用一個32位無符號整型變量來表示,變量的每一位代表一個事件,線程通過“邏輯與”或“邏輯或”將一個或多個事件關聯起來,形成事件組合。事件的“邏輯或”也稱為是獨立型同步,指的是線程與任何事件之一發生同步;事件“邏輯與”也稱為是關聯型同步,指的是線程與若干事件都發生同步。

三、RT-Thread為實例說明

? ? ? ? 1)事件只與線程相關,事件間相互獨立:每個線程可擁有32個事件標志,采用一個32bit無符號整型數進行記錄,每個bit代表一個事件;

? ? ? ? 2)事件僅用于同步,不提供數據傳輸功能;

? ? ? ? 3)事件無排隊性,即多次向線程發送同一事件(如果線程還未來得及讀的走),其效果等同于只發送一次。

? ? ? ? 在RT-Thread中,每個線程都擁有一個事件信息標記,它有三個屬性,分別是“與“、”或“和”清除標記”。當線程等待事件同步時,可以通過32個事件標志和這個事件信息標記來判斷當前接收的事件是否滿足同步條件。

? ? ? ? 如圖所示,線程#1的事件標志中第1位和第30位被置位,如果事件信息標記位設為邏輯與,則表示線程#1只有在事件1和事件30都發生以后才會被觸發喚醒,如果事件信息標記位設為邏輯或,則事件1或事件30中的任意一個發生都會觸發喚醒線程#1。如果信息標記同時設置了清除標記位,則當線程#1喚醒后將主動把事件1和事件30清零,否則事件標志將依然存在(即置1)。

四、事件集的應用場合

? ? ? ? 事件集可適用于多種場合,它能夠在一定程度上替代信號量,用于線程間同步。一個線程或中斷服務例程發送一個事件給事件集對象,而后等待的線程被喚醒并對相應的事件進行處理。但是它與信號量不同的是,事件的發哦是那個操作在事件未清除前是不可累計的,而信號量的釋放動作是累計的。事件的另一個特性是,接收線程可等待多種事件,即多個事件對應一個線程或多個線程。同時按照線程等待的參數,可選擇是“邏輯與”還是“邏輯或”觸發。這個特性也是信號量等所不具備的,信號量只能識別單一的釋放動作,而不能同時等待多種類型的釋放。

? ? ? ? 如圖所示,一個事件集包含32個事件集,特定線程只等待、接收它關注的事件。可以是一個線程等待多個事件的到來(線程1、2均等待多個事件,事件間可以使用“與”“或”邏輯觸發線程),也可以是多個線程等待一個事

件的到來(事件25)。當有它們關注的事件發生時,線程將被喚醒并進行后續的處理動作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/76224.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/76224.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/76224.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于springboot鉆孔數據管理系統的設計與實現(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 本鉆孔數據管理系統采用B/S架構,數據庫是MySQL,網站的搭建與開發采用了先進的Java語言、Hadoop、數據可視化技術進行編寫,使用了Spring Boot框架。該系統從兩個對象:由管理員和用戶來對系統進行設計構建。用戶主要功能包括&…

全雙工分軌語音數據集:讓AI實現無縫對話

清晨,智能音箱根據指令-播放音樂;駕駛途中,車載助手同步處理導航與來電;智能會議工具無縫切換多語種對話……語音交互技術正快速融入生活。然而,用戶對于對話體驗追求更自然、更流暢,實時理解,動…

Python 網絡請求利器:requests 包詳解與實戰

諸神緘默不語-個人技術博文與視頻目錄 文章目錄 一、前言二、安裝方式三、基本使用1. 發起 GET 請求2. 發起 POST 請求 四、requests請求調用常用參數1. URL2. 數據data3. 請求頭 headers4. 參數 params5. 超時時間 timeout6. 文件上傳 file:上傳純文本文件流7. jso…

linux入門四:Linux 編譯器

一、C 語言編譯器 GCC:開啟編程之旅 1.1 GCC 安裝:一站式工具鏈 GCC(GNU Compiler Collection)是 Linux 下最常用的 C/C 編譯器,支持多種編程語言。安裝命令(適用于 Debian/Ubuntu 系統)&…

建筑兔零基礎自學記錄69|爬蟲Requests-2

Requests庫初步嘗試 #導入requests庫 import requests #requests.get讀取百度網頁 rrequests.get(http://www.baidu.com) #輸出讀取網頁狀態 print(r.status_code) #輸出網頁源代碼 print(r.text) HTTP 狀態碼是三位數字,用于表示 HTTP 請求的結果。常見的狀態碼有…

Web測試流程及注意點

在Web工程過程中,基于Web系統的測試、確認和驗收是一項重要而富有挑戰性的工作。基于Web的系統測試與傳統的軟件測試不同,它不但需要檢查和驗證是否按照設計的要求運行,而且還要測試系統在不同用戶的瀏覽器端的顯示是否合適。 重要的是&…

基于MATLAB/simulink的信號調制仿真--AM調制

實驗內容: 假設y(t)(20.5*2cos(2*pi*1000*t))*5cos(2*pi*2*1e4*t)調幅系統,請將一個頻率為1000HZ的余弦波信號,通過進行AM調制,載波信號頻率為20kHZ的余弦波,調制度ma0.…

通信協議詳解(十):PSI5 —— 汽車安全傳感器的“抗干擾狙擊手”

一、PSI5是什么? 一句話秒懂 PSI5就像傳感器界的“防彈信使”:在汽車安全系統(如氣囊)中,用兩根線同時完成供電數據傳輸,即便車禍時線路受損,仍能確保關鍵信號準確送達! 基礎概念…

數據結構與算法-圖論-復習1(單源最短路,全源最短路,最小生成樹)

1. 單源最短路 單一邊權 BFS 原理:由于邊權為單一值,可使用廣度優先搜索(BFS)來求解最短路。BFS 會逐層擴展節點,由于邊權相同,第一次到達某個節點時的路徑長度就是最短路徑長度。 用法:適用…

【WRF理論第十七期】單向/雙向嵌套機制(含namelist.input詳細介紹)

WRF運行的單向/雙向嵌套機制 準備工作:WRF運行的基本流程namelist.input的詳細設置&time_control 設置&domain 嵌套結構&bdy_control 配置部分 namelist 其他注意事項Registry.EM 運行 ARW 嵌套雙向嵌套(two-way nesting)單向嵌套…

怎么查看蘋果手機和ipad的設備信息和ios udid

你知道嗎?我們每天使用的iPhone和iPad,其實隱藏著大量詳細的硬件與系統信息。除了常見的系統版本和序列號外,甚至連電池序列號、攝像頭序列號、銷售地區、芯片型號等信息,也都可以輕松查到! 如果你是開發者、維修工程…

matlab內置的git軟件版本管理功能

1、matlab多人協作開發比普通的嵌入式軟件開發困難很多 用過matlab的人都知道,版本管理對于matlab來說真的很費勁,今天介紹的這個工具也不是說它就解決了這個痛點,只是讓它變得簡單一點。版本管理肯定是不可或缺的,干就完了 2、…

vscode集成deepseek實現輔助編程(銀河麒麟系統)【詳細自用版】

針對開發者用戶,可在Visual Studio Code中接入DeepSeek,實現輔助編程。 可參考我往期文章在銀河麒麟系統環境下部署DeepSeek:基于銀河麒麟桌面&&服務器操作系統的 DeepSeek本地化部署方法【詳細自用版】 一、前期準備 &#xff08…

Java 大廠面試題 -- JVM 深度剖析:解鎖大廠 Offe 的核心密鑰

最近佳作推薦: Java大廠面試高頻考點|分布式系統JVM優化實戰全解析(附真題)(New) Java大廠面試題 – JVM 優化進階之路:從原理到實戰的深度剖析(2)(New&#…

數據庫實踐題目:在線書店管理系統

完整的數據庫實踐題目:在線書店管理系統 數據庫表結構及示例數據 書籍表(books) CREATE TABLE books ( book_id INT PRIMARY KEY, title VARCHAR(100) NOT NULL, author VARCHAR(50) NOT NULL, publisher VARCHAR(50), publish_year INT, category VARCHAR(30), …

Linux 入門指令(1)

(1)ls指令 ls -l可以縮寫成 ll 同時一個ls可以加多個后綴 比如 ll -at (2)pwd指令 (3)cd指令 cd .是當前目錄 (4)touch指令 (5)mkdir指令 (6)rmdir和rm…

圖靈逆向——題七-千山鳥飛絕

目錄列表 過程分析headers頭部M參數分析載荷x參數分析響應數據解密分析 代碼實現 一進來還是一個無限debugger,前面有講怎么過,這里直接過掉~ 老規矩,養成習慣,先看請求頭里有沒有加密參數發現好像是有個M,它是個32位…

上門預約洗鞋店小程序都具備哪些功能?

現在大家對洗鞋子的清洗條件越來越高,在家里不想去,那就要拿去洗鞋店去洗。如果有的客戶沒時間去洗鞋店,這個時候,有個洗鞋店小程序就可以進行上門取件,幫助沒時間的客戶去取需要清洗的鞋子,這樣豈不是既幫…

Node.js EventEmitter 深入解析

Node.js EventEmitter 深入解析 概述 Node.js 作為一種強大的 JavaScript 運行環境,以其異步、事件驅動特性在服務器端編程中占據了重要地位。EventEmitter 是 Node.js 中處理事件的一種機制,它允許對象(稱為“發射器”)發出事件…

C++11QT復習 (十九)

文章目錄 Day13 C 時間庫和線程庫學習筆記&#xff08;Chrono 與 Thread&#xff09;一、時間庫 <chrono>1.1 基本概念1.2 使用示例1.3 duration 字面量單位 二、線程庫 <thread>2.1 基本用法2.2 數據競爭&#xff08;Race Condition&#xff09;2.3 加鎖&#xff…