我們提供了乙個類:
public class foopublic 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:lock_guard使用了raii,建構函式上鎖,析構函式解鎖,即退出函式體時會自動解鎖輸入: [1,3,2]
輸出: "firstsecondthird"
解釋:輸入 [1,3,2] 表示執行緒 a 將會呼叫 first() 方法,執行緒 b 將會呼叫 third() 方法,執行緒 c 將會呼叫 second() 方法。
正確的輸出是 "firstsecondthird"。
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 方法 請設計修改...