国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【操作系統(tǒng)】同步和互斥詳細(xì)講解(算法+源碼)

這篇具有很好參考價值的文章主要介紹了【操作系統(tǒng)】同步和互斥詳細(xì)講解(算法+源碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

博主介紹:?全網(wǎng)粉絲喜愛+、前后端領(lǐng)域優(yōu)質(zhì)創(chuàng)作者、本質(zhì)互聯(lián)網(wǎng)精神、堅持優(yōu)質(zhì)作品共享、掘金/騰訊云/阿里云等平臺優(yōu)質(zhì)作者、擅長前后端項目開發(fā)和畢業(yè)項目實(shí)戰(zhàn)?有需要可以聯(lián)系作者我哦!

??附上相關(guān)C語言版源碼講解??

???? 精彩專欄推薦訂閱???? 不然下次找不到喲

一、同步與互斥概念

操作系統(tǒng)中的同步和互斥操作是指處理多個任務(wù)或進(jìn)程時的不同方式。多個線程訪問共享數(shù)據(jù)時,使用互斥鎖可以確保在任意時刻只有一個線程能夠修改數(shù)據(jù),防止數(shù)據(jù)不一致。

同步定義: 同步是指多個任務(wù)或進(jìn)程按照一定的順序執(zhí)行,以確保它們之間的關(guān)系和協(xié)調(diào)。

關(guān)鍵點(diǎn):

  1. 協(xié)調(diào)執(zhí)行: 任務(wù)按照一定的規(guī)則或條件順序執(zhí)行,以避免不確定的結(jié)果。
  2. 等待機(jī)制: 在同步環(huán)境中,一個任務(wù)的執(zhí)行可能需要等待其他任務(wù)的完成或滿足特定條件。

互斥定義: 互斥是指在同一時刻只允許一個任務(wù)或進(jìn)程訪問共享資源,以防止數(shù)據(jù)競爭和一致性問題。

關(guān)鍵點(diǎn):

  1. 獨(dú)占資源: 一次只有一個任務(wù)能夠訪問臨界區(qū)(共享資源的代碼段)。
  2. 互斥鎖: 通常使用互斥鎖等機(jī)制來保護(hù)共享資源,確保只有一個任務(wù)能夠持有鎖并訪問資源。

二、算法

#include <windows.h>
#include <iostream>
#include<stdio.h>

bool g_continue = true; //控制程序結(jié)束
HANDLE g_hS; //當(dāng)盤子為空時的線程 
HANDLE g_hS0; //當(dāng)盤子中放的是桔子線程 
HANDLE g_hS1; //當(dāng)盤子中放的是蘋果線程 
DWORD WINAPI father(LPVOID); //定義父親線程
DWORD WINAPI son(LPVOID); //定義兒子線程
DWORD WINAPI daughter(LPVOID);//定義女兒線程
int main()  
{  
 //創(chuàng)建各個互斥與資源信號量  
 g_hS = CreateSemaphore(NULL,1,1,NULL);  //盤子中是否有水果 
 g_hS0 = CreateSemaphore(NULL,0,1,NULL);  //盤子中的水果為桔子 
 g_hS1 = CreateSemaphore(NULL,0,1,NULL);  //盤子中的水果為蘋果 

//其中第2和3個參數(shù)為信號量的初始值和最大值

 const unsigned short father_COUNT = 0; //聲明父親
 const unsigned short son_COUNT = 0; //聲明兒子
 const unsigned short daughter_COUNT = 0;//聲明女兒
 
 //總的線程數(shù) 
 const unsigned short THREADS_COUNT = father_COUNT+son_COUNT+daughter_COUNT ;  
 HANDLE hThreads[THREADS_COUNT]; //各線程的handle  
 DWORD fatherID[father_COUNT]; //父親線程的標(biāo)識符
 DWORD sonID[son_COUNT]; //兒子線程的標(biāo)識符  
 DWORD daughterID[daughter_COUNT]; //女兒線程的標(biāo)識符
 
//創(chuàng)建父親進(jìn)程

 hThreads[0]=CreateThread(NULL,0,father,NULL,0,&fatherID[0]);  
  if (hThreads[0]==NULL) return -1;  
 
//創(chuàng)建兒子進(jìn)程
  
 hThreads[1]=CreateThread(NULL,0,son,NULL,0,&sonID[0]);  
  if (hThreads[1]==NULL) return -1;  
 
//創(chuàng)建女兒進(jìn)程
 
 hThreads[2]=CreateThread(NULL,0,daughter,NULL,0,&daughterID[0]);  
  if (hThreads[2]==NULL) return -1;  


 while(g_continue){  
  if(getchar()){ //按回車后終止程序運(yùn)行  
	  g_continue = false;  
  }  
 }  

 return 0;  
}  
//父親放水果的操作,輸出  

void eat()  
{  
 std::cerr << "兒子吃桔子" << std::endl;  
}  

 
void eat1()  
{  
 std::cerr << "女兒吃蘋果" << std::endl;  
}  

//父親進(jìn)程  
DWORD WINAPI father(LPVOID lpPara)  
{  
 while(g_continue){  
  WaitForSingleObject(g_hS,INFINITE);   
  
  int juzhi=rand()%2; //設(shè)置了一個隨機(jī)數(shù),來模擬父親放的是什么水果 
  Sleep(1500);//方便觀察實(shí)驗結(jié)果
  if(juzhi==1){
  	  printf("父親放入了一個桔子\n");
  	  Sleep(1000);
      ReleaseSemaphore(g_hS0,1,NULL); 
  }
  else{
  	printf("父親放入了一個蘋果\n"); 
  	Sleep(1000);
	   ReleaseSemaphore(g_hS1,1,NULL); 
 }
 }  
 return 0;  
}  

//兒子進(jìn)程 
DWORD WINAPI son(LPVOID lpPara)  
{  
 while(g_continue){  
  WaitForSingleObject(g_hS0,INFINITE); 
   eat(); 
   Sleep(1500); 
  ReleaseSemaphore(g_hS,1,NULL);   
 }  
 return 0;  
}    

//女兒進(jìn)程 
DWORD WINAPI daughter(LPVOID lpPara)  
{  
 while(g_continue){  
  WaitForSingleObject(g_hS1,INFINITE);    
  eat1(); 
  Sleep(1500); 
  ReleaseSemaphore(g_hS,1,NULL); 
 }  
 return 0;  
}    

執(zhí)行結(jié)果

【操作系統(tǒng)】同步和互斥詳細(xì)講解(算法+源碼),課程設(shè)計,算法,c++,c語言,數(shù)據(jù)結(jié)構(gòu),動態(tài)規(guī)劃,線性回歸

三、總結(jié)

同步的應(yīng)用:

  1. 線程同步: 在多線程編程中,同步用于協(xié)調(diào)多個線程的執(zhí)行,確保它們按照一定的順序執(zhí)行或等待某些條件滿足后再繼續(xù)執(zhí)行。

  2. 協(xié)同任務(wù): 同步可以用于協(xié)同任務(wù)的執(zhí)行,確保任務(wù)之間的依賴關(guān)系和順序。

  3. 異步編程: 同步機(jī)制常用于異步編程中,確保異步任務(wù)的正確執(zhí)行順序。

  4. GUI應(yīng)用: 在圖形用戶界面(GUI)應(yīng)用中,同步用于處理用戶界面的響應(yīng)和更新,以保持用戶體驗。

  5. 網(wǎng)絡(luò)通信: 同步操作常用于等待網(wǎng)絡(luò)數(shù)據(jù)的到達(dá)或發(fā)送數(shù)據(jù)后等待確認(rèn)。

互斥的應(yīng)用:

  1. 共享資源保護(hù): 互斥機(jī)制用于保護(hù)共享資源,防止多個線程或進(jìn)程同時訪問導(dǎo)致數(shù)據(jù)不一致性或競態(tài)條件。

  2. 臨界區(qū)保護(hù): 互斥鎖用于保護(hù)臨界區(qū),確保在任意時刻只有一個線程能夠執(zhí)行臨界區(qū)的代碼。

  3. 文件操作: 互斥可以用于文件讀寫操作,以確保在寫操作進(jìn)行時不會發(fā)生讀操作,反之亦然。

  4. 數(shù)據(jù)庫訪問: 在數(shù)據(jù)庫應(yīng)用中,互斥用于保護(hù)對數(shù)據(jù)庫的訪問,以防止并發(fā)訪問導(dǎo)致數(shù)據(jù)不一致。

  5. 資源分配: 互斥可以用于保護(hù)對有限資源的訪問,如線程池中的線程對任務(wù)的分配。

綜合應(yīng)用:

  1. 生產(chǎn)者-消費(fèi)者問題: 使用同步和互斥來解決生產(chǎn)者和消費(fèi)者之間的數(shù)據(jù)共享和協(xié)調(diào)問題。

  2. 讀寫鎖: 讀寫鎖結(jié)合了同步和互斥的特性,允許多個線程同時讀取共享數(shù)據(jù),但在寫操作時進(jìn)行互斥。

  3. 定時任務(wù)調(diào)度: 同步和互斥可以用于定時任務(wù)的調(diào)度,確保任務(wù)在指定時間執(zhí)行。

  4. 并行計算: 在并行計算中,同步和互斥用于協(xié)調(diào)和保護(hù)多個計算單元的執(zhí)行。文章來源地址http://www.zghlxwxcb.cn/news/detail-817127.html

大家點(diǎn)贊、收藏、關(guān)注、評論啦 !

謝謝哦!如果不懂,歡迎大家下方討論學(xué)習(xí)哦。

到了這里,關(guān)于【操作系統(tǒng)】同步和互斥詳細(xì)講解(算法+源碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 操作系統(tǒng)——進(jìn)程互斥的軟件實(shí)現(xiàn)算法(王道視頻p27、課本ch6)

    操作系統(tǒng)——進(jìn)程互斥的軟件實(shí)現(xiàn)算法(王道視頻p27、課本ch6)

    1.總結(jié)概覽: 2.單標(biāo)志[turn]法——算法代碼: 可能違反“空閑讓進(jìn)” 3.雙標(biāo)志[flag[2]]先檢查法——算法代碼: 如果不能利用硬件的原語的話,就可能出現(xiàn)違反“忙則等待”的問題: 4.雙標(biāo)志[flag[2]]后檢查法——算法代碼: 可能會出現(xiàn) 資源死鎖(違反“空閑讓進(jìn)”) 5.PeterSon算

    2024年02月07日
    瀏覽(22)
  • 【操作系統(tǒng)復(fù)習(xí)之路】存儲器管理(第四章 &超詳細(xì)講解)

    【操作系統(tǒng)復(fù)習(xí)之路】存儲器管理(第四章 &超詳細(xì)講解)

    目錄 一、存儲器的層次結(jié)構(gòu) 二、程序的裝入和鏈接 2.1 邏輯地址和物理地址 2.2?絕對裝入方式 2.3?可重定位裝入方式 2.4?動態(tài)運(yùn)行時裝入方式 2.5 靜態(tài)鏈接? 2.6 裝入時動態(tài)鏈接 2.7 運(yùn)行時動態(tài)鏈接 三、連續(xù)分配存儲器管理方式 3.1?單一連續(xù)分配 3.2?固定分區(qū)分配 3.3?動態(tài)分區(qū)

    2024年04月27日
    瀏覽(29)
  • 【Linux操作系統(tǒng)】Linux系統(tǒng)編程實(shí)現(xiàn)遞歸遍歷目錄,詳細(xì)講解opendir、readdir、closedir、snprintf、strcmp等函數(shù)的使用

    【Linux操作系統(tǒng)】Linux系統(tǒng)編程實(shí)現(xiàn)遞歸遍歷目錄,詳細(xì)講解opendir、readdir、closedir、snprintf、strcmp等函數(shù)的使用

    在Linux系統(tǒng)編程中,經(jīng)常需要對目錄進(jìn)行遍歷操作,以獲取目錄中的所有文件和子目錄。遞歸遍歷目錄是一種常見的方法,可以通過使用C語言來實(shí)現(xiàn)。本篇博客將詳細(xì)介紹如何使用C語言實(shí)現(xiàn)遞歸遍歷目錄的過程,并提供相應(yīng)的代碼示例,同時解釋相關(guān)函數(shù)的使用。 1.1.1 函數(shù)

    2024年02月12日
    瀏覽(26)
  • 【Linux操作系統(tǒng)】多線程搶票邏輯——學(xué)習(xí)互斥量(鎖)函數(shù)接口

    【Linux操作系統(tǒng)】多線程搶票邏輯——學(xué)習(xí)互斥量(鎖)函數(shù)接口

    臨界資源 : 多線程執(zhí)行流共享的資源就叫做臨界資源 。 臨界區(qū) :每個線程內(nèi)部, 訪問臨界資源的代碼,就叫做臨界區(qū) 。 互斥 :任何時刻, 互斥保證有且只有一個執(zhí)行流進(jìn)入臨界區(qū),訪問臨界資源,通常對臨界資源起保護(hù)作用 。 原子性 :不會被任何調(diào)度機(jī)制打斷的操作

    2024年02月16日
    瀏覽(28)
  • 操作系統(tǒng)實(shí)驗一模擬優(yōu)先級調(diào)度算法(C語言實(shí)現(xiàn)附帶詳細(xì)注釋)

    操作系統(tǒng)實(shí)驗一模擬優(yōu)先級調(diào)度算法(C語言實(shí)現(xiàn)附帶詳細(xì)注釋)

    文章目錄 優(yōu)先級調(diào)度算法介紹 兩種情況 調(diào)度算法分類 優(yōu)先級分類 實(shí)驗內(nèi)容與要求 實(shí)驗步驟 調(diào)度算法總流程圖 ?優(yōu)先級調(diào)度算法流程圖 ?實(shí)驗代碼 實(shí)驗結(jié)果 ????????優(yōu)先級調(diào)度算法既可以用于作業(yè)調(diào)度,又可以用于進(jìn)程調(diào)度。該算法中的優(yōu)先級用于描述作業(yè)或者進(jìn)程的

    2024年02月01日
    瀏覽(23)
  • 操作系統(tǒng)實(shí)驗:進(jìn)程同步控制

    操作系統(tǒng)實(shí)驗:進(jìn)程同步控制

    前言 一、開發(fā)語言及實(shí)驗平臺或?qū)嶒灜h(huán)境 二、實(shí)驗?zāi)康?三、實(shí)驗要求 四、實(shí)驗原理 五、實(shí)驗過程 六、代碼詳解 七、diy一下 總結(jié) 計算機(jī)操作系統(tǒng)是一門研究計算機(jī)系統(tǒng)的基本原理和設(shè)計方法的課程,它涉及到計算機(jī)系統(tǒng)的結(jié)構(gòu)、功能、性能和管理等方面。操作系統(tǒng)實(shí)驗是

    2024年02月05日
    瀏覽(23)
  • 【操作系統(tǒng)】第2章進(jìn)程同步、PV操作、死鎖

    【操作系統(tǒng)】第2章進(jìn)程同步、PV操作、死鎖

    (1) 臨界資源 :把 一個時間段內(nèi)只允許一個進(jìn)程使用的資源 稱為臨界資源。許多物理設(shè)備(攝像頭、打印機(jī))和許多變量、數(shù)據(jù)、內(nèi)存緩沖區(qū)都屬于臨界資源。 對臨界資源的訪問必須互斥地進(jìn)行 。 ① 進(jìn)入?yún)^(qū) :為了進(jìn)入臨界區(qū)使用臨界資源,在進(jìn)入?yún)^(qū)檢查可否進(jìn)入臨界區(qū)

    2024年02月03日
    瀏覽(23)
  • 操作系統(tǒng):4、進(jìn)程管理之進(jìn)程同步

    操作系統(tǒng):4、進(jìn)程管理之進(jìn)程同步

    上述過程,若并發(fā)執(zhí)行就會出現(xiàn)緩沖區(qū)數(shù)據(jù)出錯 “哲學(xué)家進(jìn)餐問題中會發(fā)生極端情況,所有哲學(xué)家都餓死,也就是所有進(jìn)程都陷入等待狀態(tài)” “生產(chǎn)者消費(fèi)者問題”以及“哲學(xué)家進(jìn)程問題”的根源問題是:彼此相互之間沒有通信。 若生產(chǎn)者通知消費(fèi)者我已經(jīng)完成一件產(chǎn)品生

    2023年04月26日
    瀏覽(27)
  • Rsync 文件同步(一):系統(tǒng)基本操作

    Rsync 文件同步(一):系統(tǒng)基本操作

    Rsync (remote sync) UNIX 及類 UNIX 平臺下一款數(shù)據(jù)鏡像備份軟件 很神奇 不同于 FTP 或其他文件傳輸服務(wù)進(jìn)行全量備份,它可以根據(jù)數(shù)據(jù)的變化進(jìn)行差異備份 可以使用它進(jìn)行本地數(shù)據(jù)或遠(yuǎn)程數(shù)據(jù)的復(fù)制 可以使用 SSH 安全隧道進(jìn)行加密數(shù)據(jù)傳輸 Rsync 服務(wù)端定義源數(shù)據(jù),客戶端僅在

    2024年02月02日
    瀏覽(20)
  • 操作系統(tǒng)層面下——進(jìn)程狀態(tài)講解

    操作系統(tǒng)層面下——進(jìn)程狀態(tài)講解

    ?????? 目錄 ????????一.進(jìn)程的狀態(tài):運(yùn)行態(tài) ????????1.什么是運(yùn)行狀態(tài)? ? ? ? ? 2.進(jìn)程進(jìn)入內(nèi)存的詳細(xì)圖解: ????????總結(jié): ????????二.進(jìn)程的狀態(tài):阻塞態(tài)? ????????1.什么是阻塞狀態(tài)? ????????三.進(jìn)程的狀態(tài):掛起態(tài) ????????1.什么是掛起

    2024年02月06日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包