linux

Linux C++环境下如何实现多线程同步

小樊
34
2025-03-29 03:36:56
栏目: 编程语言
C++开发者专用服务器,限时0元免费领! 查看>>

在Linux C++环境下,可以使用C++11标准库中的<thread><mutex>来实现多线程同步。以下是一些常用的同步原语:

  1. std::mutex:互斥锁,用于保护共享数据,防止多个线程同时访问。
  2. std::lock_guard:RAII风格的互斥锁管理类,用于自动管理互斥锁的锁定和解锁。
  3. std::unique_lock:更灵活的互斥锁管理类,支持定时锁定、递归锁定等。
  4. std::condition_variable:条件变量,用于线程间的等待/通知机制。
  5. std::atomic:原子操作,用于实现无锁并发。

下面是一个简单的示例,展示了如何使用std::mutexstd::lock_guard实现多线程同步:

#include <iostream>
#include <thread>
#include <vector>
#include <mutex>

std::mutex mtx; // 全局互斥锁

void print_block(int n, char c) {
    std::lock_guard<std::mutex> guard(mtx); // 自动管理互斥锁的锁定和解锁
    for (int i = 0; i < n; ++i) {
        std::cout << c;
    }
    std::cout << '\n';
}

int main() {
    std::vector<std::thread> threads;

    // 创建10个线程,每个线程打印5个字符
    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(print_block, 5, 'a' + i);
    }

    // 等待所有线程完成
    for (auto& t : threads) {
        t.join();
    }

    return 0;
}

在这个示例中,我们使用了std::mutex来保护print_block函数中的共享资源(即std::cout)。通过使用std::lock_guard,我们可以确保在离开作用域时自动释放互斥锁,从而避免死锁和其他同步问题。

对于更复杂的同步需求,可以考虑使用std::condition_variablestd::atomic等高级同步原语。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

相关推荐:Linux环境下C++多线程怎样实现同步

0
看了该问题的人还看了