20 12 31 1114 按序列印 多執行緒

2022-02-10 12:43:13 字數 1803 閱讀 2159

我們提供了乙個類:

public class foo

public void second()

public void third()

}

三個不同的執行緒將會共用乙個 foo 例項。

執行緒 a 將會呼叫 first() 方法

執行緒 b 將會呼叫 second() 方法

執行緒 c 將會呼叫 third() 方法

請設計修改程式,以確保 second() 方法在 first() 方法之後被執行,third() 方法在 second() 方法之後被執行。

示例 1:

輸入: [1,2,3]

輸出: "firstsecondthird"

解釋:有三個執行緒會被非同步啟動。

輸入 [1,2,3] 表示執行緒 a 將會呼叫 first() 方法,執行緒 b 將會呼叫 second() 方法,執行緒 c 將會呼叫 third() 方法。

正確的輸出是 "firstsecondthird"。

示例 2:

輸入: [1,3,2]

輸出: "firstsecondthird"

解釋:輸入 [1,3,2] 表示執行緒 a 將會呼叫 first() 方法,執行緒 b 將會呼叫 third() 方法,執行緒 c 將會呼叫 second() 方法。

正確的輸出是 "firstsecondthird"。

lock_guard使用了raii,建構函式上鎖,析構函式解鎖,即退出函式體時會自動解鎖

unique_lock更靈活

都需要宣告乙個mutex,利用其進行初始化

condition_variable要和unique_lock配套使用

wait不滿足條件時會unlock然後block,當被notify的時候先lock起來,再判斷條件;若為真,往下執行,若為假,unlcok & blcok

notify_all通知所有wait的執行緒,notify_one通知某個wait的執行緒

//互斥鎖

class foo

void first(functionprintfirst)

void second(functionprintsecond)

void third(functionprintthird)

};//條件變數

class foo

void first(functionprintfirst)

void second(functionprintsecond) );

// printsecond() outputs "second". do not change or remove this line.

printsecond();

rec = 2;

cv.notify_one();

}void third(functionprintthird) );

// printthird() outputs "third". do not change or remove this line.

printthird();

}};

1114 按序列印

題目描述 我們提供了乙個類 public class foo public void two public void three 三個不同的執行緒將會共用乙個 foo 例項。執行緒 a 將會呼叫 one 方法 執行緒 b 將會呼叫 two 方法 執行緒 c 將會呼叫 three 方法請設計修改程式,...

1114 按序列印

我們提供了乙個類 public class foo public void two public void three 三個不同的執行緒將會共用乙個 foo 例項。執行緒 a 將會呼叫 one 方法 執行緒 b 將會呼叫 two 方法 執行緒 c 將會呼叫 three 方法 請設計修改程式,以確保 ...

LeetCode 按序列印

第1114題 我們提供了乙個類 public class foo public void two public void three 三個不同的執行緒將會共用乙個 foo 例項。執行緒 a 將會呼叫 one 方法 執行緒 b 將會呼叫 two 方法 執行緒 c 將會呼叫 three 方法 請設計修改...