C++11 互斥锁

头文件:include <mutex>

class mutex;

成员函数:

  1. lock() —— 锁住互斥体,如果互斥体被锁,则阻塞当前线程

  2. try_lock() —— 尝试去锁互斥体,返回互斥体是否被锁

  3. unlock() —— 解锁互斥体

例子:

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

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 content1";

	g_pages_mutex.lock();
	g_pages[url] = result;
	g_pages_mutex.unlock();
}

int main()
{
    std::thread t1(save_page, "http://1");
    std::thread t2(save_page, "http://2");

    t1.join();
    t2.join();

    g_pages_mutex.lock();
    for (const auto &pair : g_pages) {
        std::cout << pair.first << " => " << pair.second << '\n';
    }
    g_pages_mutex.unlock();
}


运行后结果为:

http://1 => fake content1

http://2 => fake content1

你可能感兴趣的:(C++11 互斥锁)