使用chrono,thread和mutex在Ubuntu中使用多线程程序的标志?

时间:2017-02-26 19:09:12

标签: c++ linux gcc

编辑:该问题与标记为重复的问题无关。错误是完全不同的,让我感到惊讶的是,那些真正了解这些东西的人,将其标记为重复,好像他们想要的只是获得积分......

EDIT2:问题很清楚,甚至在标题中。我在这里重复一遍,为了更方便......

Are there any flags should you use for the functions of the program mentioned below? 
(You only need to check the headers) For example thread needs -pthread flag.

我是Linux C ++编程的初学者,也是多线程的初学者。我试图找出互斥体究竟做了什么并在其上练习,因此我去here并且我想在那里编译程序。问题是,我不知道我应该在编译命令中使用哪些标志。我正在用命令编译它:

gcc <project_name> -o <executable_name> -std=c++14 -pthread

但我收到一堆错误(编译器不识别chrono,mutex等)。我应该在编译命令中使用哪些标志?

我正在尝试使用gcc 6.2.0在Ubuntu 16.04 LTS(来自Windows 10的虚拟机)上编译它。以下是代码,为了您的方便:

#include <iostream>
#include <map>
#include <string>
#include <chrono>
#include <thread>
#include <mutex>

std::map<std::string, std::string> g_pages;
std::mutex g_pages_mutex;

void save_page(const std::string &url)
{
    // simulate a long page fetch
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::string result = "fake content";

    std::lock_guard<std::mutex> guard(g_pages_mutex);
    g_pages[url] = result;
}

int main() 
{
    std::thread t1(save_page, "http://foo");
    std::thread t2(save_page, "http://bar");
    t1.join();
    t2.join();

    // safe to access g_pages without lock now, as the threads are joined
    for (const auto &pair : g_pages) {
        std::cout << pair.first << " => " << pair.second << '\n';
    }
}

0 个答案:

没有答案