linux

如何在Linux中使用C++进行并发编程

小樊
41
2025-05-14 09:56:13
栏目: 编程语言

在Linux中使用C++进行并发编程,你可以使用C++11标准库中提供的线程支持库(<thread>),以及同步原语如互斥锁(<mutex>)、条件变量(<condition_variable>)和原子操作(<atomic>)。以下是一些基本的步骤和示例代码,帮助你开始使用C++进行并发编程。

  1. 包含必要的头文件
#include <iostream>
#include <thread>
#include <mutex>
#include <vector>
  1. 创建线程: 使用std::thread类来创建一个新的线程。
void helloFunction() {
    std::cout << "Hello from a thread!" << std::endl;
}

int main() {
    std::thread t(helloFunction);
    t.join(); // 等待线程完成
    return 0;
}
  1. 传递参数给线程函数
void greet(std::string name) {
    std::cout << "Hello, " << name << " from a thread!" << std::endl;
}

int main() {
    std::thread t(greet, "Alice");
    t.join();
    return 0;
}
  1. 线程同步: 使用std::mutex来保护共享资源,防止数据竞争。
std::mutex mtx; // 全局互斥锁
int shared_data = 0;

void increment() {
    mtx.lock(); // 加锁
    ++shared_data;
    mtx.unlock(); // 解锁
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);
    t1.join();
    t2.join();
    std::cout << "Shared data: " << shared_data << std::endl;
    return 0;
}
  1. 使用RAII管理锁: 使用std::lock_guard来自动管理锁的生命周期。
void increment() {
    std::lock_guard<std::mutex> lock(mtx); // 自动加锁和解锁
    ++shared_data;
}

int main() {
    // ... 同上
}
  1. 条件变量: 使用std::condition_variable来同步线程间的操作。
std::mutex mtx;
std::condition_variable cv;
bool ready = false;

void workerThread() {
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return ready; }); // 等待直到ready为true
    // 执行工作...
}

void trigger() {
    std::lock_guard<std::mutex> lock(mtx);
    ready = true;
    cv.notify_all(); // 通知所有等待的线程
}

int main() {
    std::thread worker(workerThread);
    // ... 做一些准备工作 ...
    trigger();
    worker.join();
    return 0;
}
  1. 原子操作: 使用std::atomic来进行无需锁的线程安全操作。
std::atomic<int> shared_data(0);

void increment() {
    ++shared_data; // 原子操作
}

int main() {
    std::thread t1(increment);
    std::thread t2(increment);
    t1.join();
    t2.join();
    std::cout << "Shared data: " << shared_data << std::endl;
    return 0;
}

这些是C++并发编程的基础。在实际应用中,你可能需要处理更复杂的同步问题,比如读写锁、屏障、future和promise等。随着你对C++并发编程的深入了解,你可以探索这些高级特性来构建更高效和健壮的多线程应用程序。

0
看了该问题的人还看了