Quando faccio funzionare questo codice:Perché questi thread non vengono eseguiti in ordine?
#include <iostream>
#include <thread>
#include <mutex>
std::mutex m;
int main()
{
std::vector<std::thread> workers;
for (int i = 0; i < 10; ++i)
{
workers.emplace_back([i]
{
std::lock_guard<std::mutex> lock(m);
std::cout << "Hi from thread " << i << std::endl;
});
}
std::for_each(workers.begin(), workers.end(), [] (std::thread& t)
{ t.join(); });
}
ho la output:
Hi from thread 7
Hi from thread 1
Hi from thread 4
Hi from thread 6
Hi from thread 0
Hi from thread 5
Hi from thread 2
Hi from thread 3
Hi from thread 9
Hi from thread 8
Anche se ho usato un mutex per mantenere un solo accesso thread alla volta. Perché l'output non è in ordine?
un accesso thread alla volta hanno nulla a che fare con iniziare ordine –
Mutex previene due di loro esecuzione quel pezzo di codice contemporaneamente. Ma perché ti aspetti qualche ordine particolare? –
"Solo un accesso thread alla volta" è esattamente ciò che hai ottenuto. Ma perché ti aspettavi che succedesse in un ordine specifico? – AnT