Sto imparando a conoscere i mutex in C++ e ho un problema con il seguente codice (tratto dalla "Libreria standard C++ di N. Josuttis").Il programma C++ blocca/getta inaspettatamente
Non capisco il motivo per cui si blocca/getta a meno che io aggiungothis_thread::sleep_for
nel thread principale (allora non blocca e tutte e tre le chiamate sono svolte).
Il compilatore è cl.exe utilizzato dalla riga di comando.
#include <future>
#include <mutex>
#include <iostream>
#include <string>
#include <thread>
#include <chrono>
std::mutex printMutex;
void print(const std::string& s)
{
std::lock_guard<std::mutex> lg(printMutex);
for (char c : s)
{
std::cout.put(c);
}
std::cout << std::endl;
}
int main()
{
auto f1 = std::async(std::launch::async, print, "Hello from thread 1");
auto f2 = std::async(std::launch::async, print, "Hello from thread 2");
// std::this_thread::sleep_for(std::chrono::seconds(1));
print(std::string("Hello from main"));
}
Non stai aspettando che i fili finiscano. Penso che questo sia un problema con la libreria MSVC qui. – Niall