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

【操作系統(tǒng)-進(jìn)程】PV操作——讀者寫者問題

這篇具有很好參考價值的文章主要介紹了【操作系統(tǒng)-進(jìn)程】PV操作——讀者寫者問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

讀者寫者問題萬能模板

讀者寫者問題,其本質(zhì)就是連續(xù)多個同類進(jìn)程訪問同一個臨界資源的問題。

第一個進(jìn)程開始訪問臨界資源前,需要對資源加上互斥鎖,后面的進(jìn)程再訪問時就不用再對資源加互斥鎖了,直到最后一個進(jìn)程訪問完后,發(fā)現(xiàn)自己是最后一個進(jìn)程,就解鎖互斥鎖。這就像一種情況:第一個人進(jìn)房間時必須順手開門,后面進(jìn)來的人和離開的人就不用開門,直到最后一個人離開房間時才需要順手關(guān)門。

代碼的通用模板是“三段式”,如下:

int count = 0; // 記錄正在訪問的進(jìn)程數(shù)量
信號量 busy = 1; // “完成事件”的互斥鎖
信號量 mutex = 1; // 變量 count 的互斥鎖

Process(){
    while(1){
        P(mutex);
        count++; // 訪問資源的進(jìn)程數(shù)量加 1
        if (count == 1){ // (1)如果發(fā)現(xiàn)自己是第一個訪問的進(jìn)程,需要負(fù)責(zé)加鎖
            P(busy);
        }
        V(mutex);
        
        完成事件; // (2)訪問臨界資源、完成臨界事件
        
        P(mutex);
        count--; // 訪問完畢,訪問資源的進(jìn)程數(shù)量減 1
        if (count == 0){ // (3)如果發(fā)現(xiàn)自己是最后一個訪問的進(jìn)程,需要負(fù)責(zé)解鎖
            V(busy);
        }
        V(mutex);
    }
}

理解了最基本的原理后,下面來正式討論讀者寫者問題。

【讀者寫者問題】有讀者和寫者兩組并發(fā)進(jìn)程,共享一個文件,當(dāng)兩個或兩個以上的讀進(jìn)程(只是讀數(shù)據(jù),不會對數(shù)據(jù)產(chǎn)生影響,而消費者讀數(shù)據(jù)時,會將數(shù)據(jù)取走,因此不能兩個消費者一起讀數(shù)據(jù))同時訪問共享數(shù)據(jù)時不會產(chǎn)生副作用,但若某個寫進(jìn)程和其他進(jìn)程(讀進(jìn)程或?qū)戇M(jìn)程)同時訪問共享數(shù)據(jù)時則可能導(dǎo)致數(shù)據(jù)不一致的錯誤。

因此要求:

  • 允許多個讀者可以同時對文件執(zhí)行讀操作;
  • 只允許一個寫者往文件中寫信息;
  • 任一寫者在完成寫操作之前不允許其他讀者或?qū)懻吖ぷ鳎?/li>
  • 寫者執(zhí)行寫操作前,應(yīng)讓已有的讀者和寫者全部退出。

萬能模板 1——讀進(jìn)程優(yōu)先

即使寫者發(fā)出了請求寫的信號,但是只要還有讀者在讀取內(nèi)容,就還允許其他讀者繼續(xù)讀取內(nèi)容,直到所有讀者結(jié)束讀取,才真正開始寫。

int count = 0;
信號量 busy = 1; // “讀文件”和“寫文件”的互斥鎖
信號量 mutex = 1; // 變量 count 的互斥鎖

Reader(){ // 讀者進(jìn)程
    while(1){
        P(mutex);
        count++; 
        if (count == 1){ 
            P(busy);
        }
        V(mutex);
        
        讀文件; 
        
        P(mutex);
        count--; 
        if (count == 0){ 
            V(busy);
        }
        V(mutex);
    }
}

Writer(){ // 寫者進(jìn)程
    while(1){
        P(busy);
        寫文件;
        V(busy);
    }
}

如果讀者寫者到達(dá)的順序是:讀者 1–讀者2–讀者 3–寫者 A–讀者 4–寫者 B–讀者 5,則:

  • 讀者 1、讀者 2、讀者 3 到達(dá),busy 加鎖,開始讀;
  • 寫者 A 到達(dá),但是讀者還在讀,未釋放 busy 鎖,因此不能寫;
  • 讀者 4 到達(dá),可以開始讀;
  • 寫者 B 到達(dá),但是讀者還在讀,未釋放 busy 鎖,因此不能寫;
  • 讀者 5 到達(dá),可以開始讀;
  • 等到讀者們都讀完,釋放 busy 鎖,寫者才可以開始寫。

萬能模板 2——讀寫公平法

讀寫進(jìn)程都要排隊進(jìn)行操作文件。即使里面有讀進(jìn)程在操作文件,讀進(jìn)程也要和寫進(jìn)程一起排隊。

int count = 0;
信號量 queue = 1; // 實現(xiàn)“讀寫公平”的互斥鎖,可以視為一個隊列
信號量 busy = 1; // “讀文件”和“寫文件”的互斥鎖
信號量 mutex = 1; // 變量 count 的互斥鎖

Reader(){ // 讀者進(jìn)程
    while(1){
        P(queue); // 在無寫進(jìn)程請求時不需要進(jìn)入隊列
        P(mutex); // 該互斥量實際上是多余的,上面語句已經(jīng)兼有互斥功能
        count++; 
        if (count == 1){ 
            P(busy);
        }
        V(mutex); // 該互斥量實際上是多余的,下面語句已經(jīng)兼有互斥功能
        V(queue); // 恢復(fù)對共享文件的訪問
        
        讀文件; 
        
        P(mutex);
        count--; 
        if (count == 0){ 
            V(busy);
        }
        V(mutex);
    }
}

Writer(){ // 寫者進(jìn)程
    while(1){
        P(queue); // 在無其他寫進(jìn)程請求時不需要進(jìn)入隊列
        P(busy);
        寫文件;
        V(busy);
        V(queue); // 恢復(fù)對共享文件的訪問
    }
}

如果讀者寫者到達(dá)的順序是:讀者 1–讀者2–讀者 3–寫者 A–讀者 4–寫者 B–讀者 5,則:

  • 讀者 1、讀者 2、讀者 3 到達(dá),busy 加鎖,開始讀;
  • 寫者 A 到達(dá),queue 加鎖,但是讀者還在讀,busy 鎖仍未釋放,因此不能寫;
  • 讀者 4 到達(dá),但是讀者還在讀,queue 和 busy 鎖仍未釋放,不能開始讀;
  • 寫者 B 到達(dá),queue 鎖和 busy 鎖仍未釋放,因此不能寫;
  • 讀者 5 到達(dá),但是讀者還在讀,queue 和 busy 鎖仍未釋放,不能開始讀;
  • 等到讀者 1 到 3 都讀完,釋放 busy 鎖,寫者 A 才可以開始寫;
  • 接下來就是按讀者 4、寫者 B、讀者 5 的順序依次訪問文件。

實際上,讀寫公平法也可以不用任何除了訪問文件外的互斥鎖:

信號量 busy = 1; // 也可以視為一個隊列

Reader(){ // 讀者進(jìn)程
    while(1){
        P(busy);
        讀文件;
        V(busy);
    }
}

Writer(){ // 寫者進(jìn)程
    while(1){
        P(busy);
        寫文件;
        V(busy);
    }
}

萬能模板 3——寫進(jìn)程優(yōu)先

如果有寫者申請寫文件,那么在申請之前還在讀取文件的讀進(jìn)程可以繼續(xù)讀取,但是如果再有讀者申請讀取文件,則不能夠讀取,只有在所有的寫者寫完之后才可以讀取。

int ReaderCount = 0; // 讀者數(shù)量
int WriterCount = 0; // 寫者數(shù)量
信號量 Read = 1; // “讀文件”的互斥鎖
信號量 Write = 1; // “寫文件”的互斥鎖
信號量 ReaderMutex = 1; // 變量 ReaderCount 的互斥鎖
信號量 WriterMutex = 1; // 變量 WriterCount 的互斥鎖

Reader(){ // 讀者進(jìn)程
    while(1){
        P(Read); // 每個讀進(jìn)程都需要對 Read 加鎖
        P(ReaderMutex); // 對 ReadCount 的互斥,實際上,上條語句已經(jīng)兼有此功能,可以去掉
        ReaderCount++; 
        if (ReaderCount == 1){ // 如果是第一個讀進(jìn)程
            P(Write); // 則對寫者上鎖
        }
        V(ReaderMutex); // 對 ReadCount 的互斥,實際上,下條語句已經(jīng)兼有此功能,可以去掉
        V(Read); // Read 解鎖
        
        讀文件; 
        
        P(ReaderMutex); // 對 ReadCount 的互斥
        ReaderCount--; 
        if (ReaderCount == 0){ // 如果是最后一個讀進(jìn)程
            V(Write); // 則對寫者解鎖
        }
        V(ReaderMutex); // 對 ReadCount 的互斥
    }
}

Writer(){ // 寫者進(jìn)程
    while(1){
        P(WriterMutex); // 對 WriterCount 的互斥
        WriterCount++; 
        if (WriterCount == 1){ // 如果是第一個寫進(jìn)程
            P(Read); // 則對讀者上鎖
        }
        V(WriterMutex); // 對 WriterCount 的互斥
        
        P(Write); // Write 加鎖
        寫文件; 
        V(Write); // Write 解鎖
        
        P(WriterMutex); // 對 WriterCount 的互斥
        WriterCount--; 
        if (WriterCount == 0){ // 如果是最后一個寫進(jìn)程
            V(Read); // 則對讀者解鎖
        }
        V(WriterMutex); // 對 WriterCount 的互斥
    }
}

如果讀者寫者到達(dá)的順序是:讀者 1–讀者2–讀者 3–寫者 A–讀者 4–寫者 B–讀者 5,則:

  • 讀者 1、讀者 2、讀者 3 到達(dá),Write 加鎖,開始讀;
  • 寫者 A 到達(dá),Read 加鎖,但是讀者還在讀,Write 鎖仍未釋放,因此不能寫;
  • 讀者 4 到達(dá),Read 鎖仍未釋放,不能開始讀;
  • 寫者 B 到達(dá),Write 鎖仍未釋放,因此不能寫;
  • 讀者 5 到達(dá),Read 鎖仍未釋放,不能開始讀;
  • 等到讀者 1 到 3 都讀完,釋放 Write 鎖,寫者 A 才可以開始寫,寫完后 Write 解鎖。由于寫者 A 不是最后一個寫進(jìn)程,因此 Read 不解鎖;
  • 寫者 B 進(jìn)行寫操作,寫完后 Write 解鎖,由于寫者 B 是最后一個寫進(jìn)程,因此 Read 解鎖;
  • 讀者 4、讀者 5 依次進(jìn)行讀操作。

題目 1:南北過橋問題

【題目 1】有橋如下圖所示,車流如箭頭所示,橋上不允許兩車交匯,但允許同方向多輛車依次通過(即橋上可以有多個同方向的車)。用P、V操作實現(xiàn)交通管理以防止橋上堵塞。

讀者寫者問題,# 計算機(jī)操作系統(tǒng),408,同步,互斥,算法

【解答】直接套“三段式”,如下:

int count1 = 0; // 北到南的車輛數(shù)
int count2 = 0; // 南到北車輛數(shù)
信號量 bridge = 1;
信號量 mutex1 = 1;
信號量 mutex2 = 1;

北到南(){
    P(mutex1);
    count1++;
    if (count1 == 1){
        P(bridge);
    }
    V(mutex1);
    
    北到南過橋;
    
    P(mutex1);
    count1--;
    if (count1 == 0){
        V(bridge);
    }
    V(mutex1);   
}

南到北(){
    P(mutex2);
    count2++;
    if (count2 == 1){
        P(bridge);
    }
    V(mutex2);
    
    南到北過橋;
    
    P(mutex2);
    count2--;
    if (count2 == 0){
        V(bridge);
    }
    V(mutex2);   
}

題目 2:錄像廳問題

【題目 2】假設(shè)一個錄像廳有 0,1,2 三種不同的錄像片可由觀眾選擇放映。錄像廳的放映規(guī)則為:

  • 任何時刻最多只能放映一種錄像片,正在放映的錄像片是自動循環(huán)放映的。最后一個觀眾主動離開時結(jié)束當(dāng)前錄像片的放映。
  • 選擇當(dāng)前正在放映錄像片的觀眾可立即進(jìn)入,允許同時有多位選擇同一中錄像片的觀眾同時觀看,同時觀看的觀眾數(shù)量不受限制。
  • 等待觀看其他錄像片的觀眾按到達(dá)順序排隊,當(dāng)一種新的錄像片開始放映時,所有等待觀看該錄像片的觀眾可一次進(jìn)入錄像廳同時觀看。

【解答 1】本題也可以直接套“三段式”,如下:

int count0 = 0; // 看影片 0 的觀眾數(shù)
int count1 = 0; // 看影片 1 的觀眾數(shù)
int count2 = 0; // 看影片 2 的觀眾數(shù)
信號量 movie = 1;
信號量 mutex0 = 1;
信號量 mutex1 = 1;
信號量 mutex2 = 1;

看影片0的觀眾(){
    P(mutex0);
    count0++;
    if (count0 == 1){
        P(movie);
    }
    V(mutex0);
    
    看影片0;
    
    P(mutex0);
    count0--;
    if (count0 == 0){
        V(movie);
    }
    V(mutex0);
}

看影片1的觀眾(){
    P(mutex1);
    count1++;
    if (count1 == 1){
        P(movie);
    }
    V(mutex1);
    
    看影片1;
    
    P(mutex1);
    count1--;
    if (count1 == 0){
        V(movie);
    }
    V(mutex1);
}

看影片2的觀眾(){
    P(mutex2);
    count2++;
    if (count2 == 1){
        P(movie);
    }
    V(mutex2);
    
    看影片2;
    
    P(mutex2);
    count2--;
    if (count2 == 0){
        V(movie);
    }
    V(mutex2);
}

【解答 2】借助“寫進(jìn)程優(yōu)先”的思想,觀看某影片的觀眾在進(jìn)去前,可以先把要觀看其他影片的觀眾先上鎖,讓他們暫時阻塞,如下:

int count0 = 0; // 看影片 0 的觀眾數(shù)
int count1 = 0; // 看影片 1 的觀眾數(shù)
int count2 = 0; // 看影片 2 的觀眾數(shù)
信號量 mutex0 = 1; // 影片 0 的互斥鎖,兼有對變量 count0 的互斥功能
信號量 mutex1 = 1; // 影片 1 的互斥鎖,兼有對變量 count1 的互斥功能
信號量 mutex2 = 1; // 影片 2 的互斥鎖,兼有對變量 count2 的互斥功能


看影片0的觀眾(){
    P(mutex0);
    count0++;
    if (count0 == 1){ // 第一個進(jìn)去的觀眾把其他影片的觀眾“擋住”
        P(mutex1);
        P(mutex2);
    }
    V(mutex0);
    
    看影片0;
    
    P(mutex0);
    count0--;
    if (count0 == 0){ // 最后一個出來的觀眾允許其他影片的觀眾進(jìn)來
        V(mutex1);
        V(mutex2);
    }
    V(mutex0);
}


看影片1的觀眾(){
    P(mutex1);
    count1++;
    if (count1 == 1){ // 第一個進(jìn)去的觀眾把其他影片的觀眾“擋住”
        P(mutex0);
        P(mutex2);
    }
    V(mutex1);
    
    看影片1;
    
    P(mutex1);
    count1--;
    if (count1 == 0){ // 最后一個出來的觀眾允許其他影片的觀眾進(jìn)來
        V(mutex0);
        V(mutex2);
    }
    V(mutex1);
}


看影片2的觀眾(){
    P(mutex2);
    count2++;
    if (count2 == 1){ // 第一個進(jìn)去的觀眾把其他影片的觀眾“擋住”
        P(mutex0);
        P(mutex1);
    }
    V(mutex2);
    
    看影片2;
    
    P(mutex2);
    count2--;
    if (count2 == 0){ // 最后一個出來的觀眾允許其他影片的觀眾進(jìn)來
        V(mutex0);
        V(mutex1);
    }
    V(mutex2);
}

看似沒毛病吧。然而,事實上這段代碼是有問題的,可能會引發(fā)死鎖,哈哈哈……你發(fā)現(xiàn)了嗎?

題目 3:更衣問題

【題目 3】某男??球俱樂部,有教練、隊員若?。每次?球訓(xùn)練開始之前,教練、球員都需要先進(jìn)?更?室換?服,可惜俱樂部只有?個更?室。教練們臉?薄,?法接受和別?共?更?室。隊員們臉?厚,可以和其他隊員?起使?更?室。如果隊員和教練都要使?更?室,則應(yīng)該讓教練優(yōu)先。請使? P、V 操作描述上述過程的互斥與同步,并說明所?信號量及初值的含義。

【解答】把教練視為寫進(jìn)程,把隊員視為讀進(jìn)程,更衣室視為緩沖區(qū),則該題需要實現(xiàn)的“寫進(jìn)程優(yōu)先”。如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-794771.html

int ReaderCount = 0; // 讀者數(shù)量
int WriterCount = 0; // 寫者數(shù)量
信號量 Read = 1; // “讀文件”的互斥鎖
信號量 Write = 1; // “寫文件”的互斥鎖
信號量 ReaderMutex = 1; // 變量 ReaderCount 的互斥鎖
信號量 WriterMutex = 1; // 變量 WriterCount 的互斥鎖

Reader(){ // 讀者進(jìn)程(相當(dāng)于教練)
    while(1){
        P(Read); // 每個讀進(jìn)程都需要對 Read 加鎖
        P(ReaderMutex); // 對 ReadCount 的互斥
        ReaderCount++; 
        if (ReaderCount == 1){ // 如果是第一個讀進(jìn)程
            P(Write); // 則對寫者上鎖
        }
        V(ReaderMutex); // 對 ReadCount 的互斥
        V(Read); // Read 解鎖
        
        讀文件; 
        
        P(ReaderMutex); // 對 ReadCount 的互斥
        ReaderCount--; 
        if (ReaderCount == 0){ // 如果是最后一個讀進(jìn)程
            V(Write); // 則對寫者解鎖
        }
        V(ReaderMutex); // 對 ReadCount 的互斥
    }
}

Writer(){ // 寫者進(jìn)程(相當(dāng)于隊員)
    while(1){
        P(WriterMutex); // 對 WriterCount 的互斥
        WriterCount++; 
        if (WriterCount == 1){ // 如果是第一個寫進(jìn)程
            P(Read); // 則對讀者上鎖
        }
        V(WriterMutex); // 對 WriterCount 的互斥
        
        P(Write); // Write 加鎖
        寫文件; 
        V(Write); // Write 解鎖
        
        P(WriterMutex); // 對 WriterCount 的互斥
        WriterCount--; 
        if (WriterCount == 0){ // 如果是最后一個寫進(jìn)程
            V(Read); // 則對讀者解鎖
        }
        V(WriterMutex); // 對 WriterCount 的互斥
    }
}

到了這里,關(guān)于【操作系統(tǒng)-進(jìn)程】PV操作——讀者寫者問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 計算機(jī)操作系統(tǒng)實驗:進(jìn)程調(diào)度實驗

    計算機(jī)操作系統(tǒng)實驗:進(jìn)程調(diào)度實驗

    前言 二、實驗?zāi)康?三、實驗要求 四、實驗原理 五、實驗過程 六、代碼詳解 總結(jié) 計算機(jī)操作系統(tǒng)是管理計算機(jī)硬件和軟件資源的核心軟件,它負(fù)責(zé)為用戶提供一個友好、高效、安全的使用環(huán)境。進(jìn)程調(diào)度是操作系統(tǒng)的一個重要功能,它決定了進(jìn)程在處理器上的執(zhí)行順序和時

    2024年02月07日
    瀏覽(22)
  • 計算機(jī)操作系統(tǒng)實驗-進(jìn)程調(diào)度模擬算法

    進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實驗要求用高級語言編寫模擬進(jìn)程調(diào)度程序,以 便加深理解有關(guān)進(jìn)程控制快、進(jìn)程隊列等概念,并體會和了解優(yōu)先數(shù)算法和時間片輪轉(zhuǎn)算法 的具體實施辦法。 1.設(shè)計進(jìn)程控制塊 PCB 的結(jié)構(gòu),通常應(yīng)包括如下信息: 進(jìn)程名、進(jìn)程優(yōu)先數(shù)(

    2024年02月05日
    瀏覽(89)
  • 【lesson59】線程池問題解答和讀者寫者問題

    【lesson59】線程池問題解答和讀者寫者問題

    單例模式是一種 “經(jīng)典的, 常用的, 常考的” 設(shè)計模式. IT行業(yè)這么火, 涌入的人很多. 俗話說林子大了啥鳥都有. 大佬和菜雞們兩極分化的越來越嚴(yán)重. 為了讓我們這些菜雞們不太拖大佬的后腿, 于是大佬們 針對一些經(jīng)典的常見的場景, 給定了一些對應(yīng)的解決方案 , 這個就是設(shè)

    2024年02月21日
    瀏覽(20)
  • 計算機(jī)操作系統(tǒng)重點概念整理-第三章 進(jìn)程同步【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計算機(jī)操作系統(tǒng)重點概念整理-第三章 進(jìn)程同步【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計算機(jī)操作系統(tǒng)復(fù)習(xí)系列文章傳送門: 第一章 計算機(jī)系統(tǒng)概述 第二章 進(jìn)程管理 第三章 進(jìn)程同步 第四章 內(nèi)存管理 第五章 文件管理 第六章 輸出輸出I/O管理 給大家整理了一下計算機(jī)操作系統(tǒng)中的重點概念,以供大家期末復(fù)習(xí)和考研復(fù)習(xí)的時候使用。 參考資料是王道的計算

    2024年02月08日
    瀏覽(28)
  • 計算機(jī)操作系統(tǒng)重點概念整理-第二章 進(jìn)程管理【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計算機(jī)操作系統(tǒng)重點概念整理-第二章 進(jìn)程管理【期末復(fù)習(xí)|考研復(fù)習(xí)】

    計算機(jī)操作系統(tǒng)復(fù)習(xí)系列文章傳送門: 第一章 計算機(jī)系統(tǒng)概述 第二章 進(jìn)程管理 第三章 進(jìn)程同步 第四章 內(nèi)存管理 第五章 文件管理 第六章 輸出輸出I/O管理 給大家整理了一下計算機(jī)操作系統(tǒng)中的重點概念,以供大家期末復(fù)習(xí)和考研復(fù)習(xí)的時候使用。 參考資料是王道的計算

    2024年02月08日
    瀏覽(35)
  • 計算機(jī)操作系統(tǒng)【慕課版】習(xí)題答案(第2章進(jìn)程的描述與控制)

    計算機(jī)操作系統(tǒng)【慕課版】習(xí)題答案(第2章進(jìn)程的描述與控制)

    一:簡答題 (1).什么是前趨圖?試畫出下面四條語句的前趨圖. S1:a=x+y; S2:b=z+1; S3:c=a-b; S4:w=c+1; 答:前趨圖(Precedence Graph)是一個有向無循環(huán)圖,記為DAG(DirectedAcyclicGraph),用于描述進(jìn)程之間執(zhí)行的前后關(guān)系。 (2)什么是進(jìn)程? OS中為什么要引入進(jìn)程?它會產(chǎn)生什么樣的

    2024年04月13日
    瀏覽(19)
  • 用信號量機(jī)制解決讀者-寫者問題C語言實現(xiàn)

    用信號量機(jī)制解決讀者-寫者問題C語言實現(xiàn)

    文章目錄 介紹 一、什么是進(jìn)程同步,進(jìn)程互斥 二、讀者-寫者問題概述 1.概念圖 2.實例代碼 總結(jié) 通過實驗?zāi)M讀者和寫者之間的關(guān)系,了解并掌握他們之間的關(guān)系及其原理。由此增加對進(jìn)程同步的問題的了解。具體如下: ? 1)掌握基本的同步互斥算法,理解讀者和寫者模型

    2024年02月02日
    瀏覽(19)
  • 實現(xiàn)時間片輪轉(zhuǎn)算法(模擬)計算機(jī)操作系統(tǒng)實驗5:進(jìn)程調(diào)度算法模擬-RR

    實現(xiàn)時間片輪轉(zhuǎn)算法(模擬)計算機(jī)操作系統(tǒng)實驗5:進(jìn)程調(diào)度算法模擬-RR

    實驗內(nèi)容: 實現(xiàn)時間片輪轉(zhuǎn)算法(模擬),要求如下: 1、用到的數(shù)據(jù)結(jié)構(gòu) /* PCB / struct PCB { pid_t pid;//進(jìn)程 PID int state; //狀態(tài)信息,1 表示正在運行,0 表示暫停,-1 表示結(jié)束 unsigned long runned_time;//已運行時間 unsigned long need_running_time;//剩余運行時間 }; / PCB集合 */ struct PCB pcb[TOT

    2024年02月04日
    瀏覽(21)
  • linux線程池、基于線程池的單例模式、讀者寫者問題

    linux線程池、基于線程池的單例模式、讀者寫者問題

    線程池: 一種線程使用模式。線程過多會帶來調(diào)度開銷,進(jìn)而影響緩存局部性和整體性能。而線程池維護(hù)著多個線程,等待著監(jiān)督管理者分配可并發(fā)執(zhí)行的任務(wù)。這避免了在處理短時間任務(wù)時創(chuàng)建與銷毀線程的代價。線程池不僅能夠保證內(nèi)核的充分利用,還能防止過分調(diào)度。

    2024年02月03日
    瀏覽(22)
  • 【Linux】線程池設(shè)計/單例模式/STL、智能指針與線程安全/讀者寫者問題

    線程池:一種線程使用模式。線程過多會帶來調(diào)度開銷,進(jìn)而影響緩存局部性和整體性能。而線程池維護(hù)著多個線程,等待著監(jiān)督管理者分配可并發(fā)執(zhí)行的任務(wù)。這避免了在處理短時間任務(wù)時創(chuàng)建與銷毀線程的代價。線程池不僅能夠保證內(nèi)核的充分利用,還能防止過分調(diào)度???/p>

    2024年02月03日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包