我有以下程序(由例子!):同步三個線程在C++
#include<thread>
#include<mutex>
#include<iostream>
class MultiClass {
public:
void Run() {
std::thread t1(&MultiClass::Calc, this);
std::thread t2(&MultiClass::Calc, this);
std::thread t3(&MultiClass::Calc, this);
t1.join();
t2.join();
t3.join();
}
private:
void Calc() {
for (int i = 0; i < 10; ++i) {
std::cout << i << std::endl;
}
}
};
int main() {
MultiClass m;
m.Run();
return 0;
}
我需要的是同步的循環迭代通過以下方式和我不能拿出一個解決方案(I」一直在擺弄了約一個小時,現在使用互斥體,但無法找到組合): t1
和t2
應做一個循環迭代,然後t3
應做一個迭代,然後再t1
和t2
應做一個,然後t3
應做一個。
所以你看,我需要t1
和t2
同時做事情和經過一次迭代,t3
應該自己做一個迭代。
你能指點一下我該怎麼做到嗎?就像我說的那樣,我一直在用互斥體嘗試這個,並且不能提出解決方案。
爲什麼要創建3線程,最多允許2個並行運行? – MikeMB
1.解釋說明只有2個線程並行運行,2.這取決於您的硬件。在現代CPU上可以並行運行更多的兩個線程(例如,使用HT的雙核心的四核) – Nidhoegger
在您的示例中,您正在創建3個Thread對象,其中只允許2個並行邏輯運行。這通常意味着你失去了表現。我在問爲什麼會出現這種情況,因爲有不同的可能性來實現你想要的功能,但根據你的程序結構的原因,有一種可能比另一種更可取。 – MikeMB