🐋
Blog
C++
C++
  • C++
  • 基本语法
    • 冷门知识
    • 右值
    • lambda
  • 奇技淫巧
    • 算数上的问题
    • 图存储方式
    • 自定义排序函数
  • 多线程
    • Thread
    • Mutex & Atomic
    • Condition_variable & Semaphore
    • Promise & Future
由 GitBook 提供支持
在本页
  • mutex
  • atomic
  1. 多线程

Mutex & Atomic

mutex

mutex 是用于保护共享数据免受多个线程同时访问的同步原语。

std::mutex mutex;

mutex.lock();

// do something else
// but race condition

mutex.unlock();

但是我们一般不用 mutex 对 race condition 上锁,而是用 std::unique_lock,std::lock_guard 这些更安全的方式。

lock_guard

std::lock_guard 是接受一个 mutex 的类(RAII),在获取资源时既初始化。 在作用域中创建 lock_guard 并获取 mutex,在离开作用域时销毁 lock_guard,释放锁。

std::mutex mutex;
{
    std::lock_guard<std::mutex> lg(mutex);
}

unique_lock

unique_lock 和 lock_guard 十分相似,只不过前者可以作为函数返回值,扩展其作用域。

std::mutex mutex;
{
    std:unique_lock<std::mutex> ul(mutex);
    ul.unlock();
    ul.lock();
}

std::unique_lock<std::mutex> f() {
    std::unique_lock<std::mutex> ul(mutex);
    return ul;
}

atomic

std::atomic 是一个模板类,创建一个原子对象。可以免受多线程访问时的 race condition。

std::atomic<int> gv = 0;
上一页Thread下一页Condition_variable & Semaphore

最后更新于2年前