我正在學習C++中的互斥鎖,並且在下面的代碼中有問題(取自N. Josuttis的「The C++ Standard Library」)。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 2014-10-09 12:49:43