多執行緒ABCD面試題

2021-08-23 14:04:06 字數 1375 閱讀 1569

題目是這樣的:

編寫乙個程式,程式會啟動4個執行緒,向4個檔案a,b,c,d裡寫入資料,每個執行緒只能寫乙個值。 

執行緒a:只寫a

執行緒b:只寫b

執行緒c:只寫c

執行緒d:只寫d

4個檔案a,b,c,d。

程式執行起來,4個檔案的寫入結果如下:

a:abcdabcd...

b:bcdabcda...

c:cdabcdab...

d:dabcdabc...

思路如下:

四個檔案輸出流輪流被寫,通過控制乙個變數的變化,來控制是那個執行緒來寫檔案。開始的四個字母寫,abcd四個執行緒按順序輪流寫入四個檔案,第5個檔案寫的時候,要b執行緒寫入到a檔案,這時就控制全域性變數在d執行緒寫入以後,b執行緒接著寫。我這裡使用了全域性變數。控制邏輯如下:

void changestate()
全部**如下:

//

//編寫乙個程式,程式會啟動4個執行緒,向4個檔案a,b,c,d裡寫入資料,每個執行緒只能寫乙個值。

// 執行緒a:只寫a

// 執行緒b:只寫b

// 執行緒c:只寫c

// 執行緒d:只寫d

////4個檔案a,b,c,d。

////程式執行起來,4個檔案的寫入結果如下:

// a:abcdabcd...

// b:bcdabcda...

// c:cdabcdab...

// d:dabcdabc...

//#include#include#include#include#include#include#include#include#includeusing namespace std;

std::mutex fourchamutex;

std::condition_variable waitcon;

char gcha='a';

namespace

class ofstreamlist

void changestate()

ofstream& currentofs()

private:

int count=0;

char nextcha='b';

};void statechange(char cha));

statechange(cha);

onelock.unlock();

waitcon.notify_all();

}catch(exception & e)

}}int main(void)

多執行緒面試題

題目 主線程執行10次,子執行緒執行10次,此過程重複50次 package com.thread.test function 主線程執行10次,子執行緒執行10次,此過程重複50次 public class threadproblem start for int j 0 j 50 j class ...

面試題 多執行緒

現有程式同時啟動了4個執行緒去呼叫testdo.dosome key,value 方法,由於testdo.dosome key,value 方法內的 是先暫停1秒,然後再輸出以秒為單位的當前時間值,所以,會列印出4個相同的時間值,如下所示 4 4 1258199615 1 1 1258199615 ...

多執行緒面試題

執行緒池的優點?執行緒是稀缺資源,使用執行緒池可以減少建立和銷毀執行緒的次數,每個工作執行緒都可以重複使用。執行緒池為執行緒生命週期開銷問題和資源不足問題提供了解決方案。可以根據系統的承受能力,調整執行緒池中工作執行緒的數量,防止因為消耗過多記憶體導致伺服器崩潰。public threadpoole...