Я изучаю мьютексы на C++ и имею проблему со следующим кодом (взятым из N. Josuttis «Стандартная библиотека C++»).Программа на C++ неожиданно блокирует/бросает
Я не понимаю, почему он блокирует/бросков , если я не добавитьthis_thread::sleep_for
в главном потоке (тогда он не блокирует и все три вызова выполняется).
Компилятор cl.exe, используемый в командной строке.
#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"));
}
Вы не ожидали окончания нитей. Я думаю, что это проблема с библиотекой MSVC. – Niall