C++保证线程安全的方式

1、互斥量

可以确保同一时间只有一个线程访问临界区,防止出现竞态条件。

2、原子操作

std::atomic<int> mutex(1);

对原子变量的操作是线程安全的。

3、读写锁

std::shared_mutex mutex;
// 读者:共享锁定
mutex.lock_shared();
mutex.unlock_shared();

//写者:独占锁定
mutex.lock();
mutex.unlock();

4、条件变量

配合互斥锁工作。见经典同步问题及其伪代码实现 - hellozhangjz - 博客园 (cnblogs.com)

5、线程本地存储

#include <iostream>
#include <thread>
thread_local int var = 0;  // 线程本地变量

void incrementCounter()
{
    ++var;
    std::cout << std::this_thread::get_id() << ": " << var << std::endl;
}

int main()
{
    std::thread t1(incrementCounter);
    std::thread t2(incrementCounter);

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

    return 0;
}

每个线程都有一个var 备份并且每个线程对 var 的修改都只对该线程可见。

posted @ 2024-03-07 19:55  hellozhangjz  阅读(100)  评论(0编辑  收藏  举报