温馨提示×

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

小樊
34
2025-03-04 22:58:15
栏目: 编程语言
C++开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Linux下使用C++进行并发编程,通常会用到线程库 <thread>、互斥锁 <mutex>、条件变量 <condition_variable> 等。以下是一些基本的步骤和示例代码,帮助你开始使用C++进行并发编程。

1. 包含必要的头文件

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

2. 创建线程

使用 std::thread 类来创建线程。

void threadFunction(int id) {
    std::cout << "Thread " << id << " is running\n";
}

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

    for (int i = 0; i < 5; ++i) {
        threads.emplace_back(threadFunction, i);
    }

    for (auto& t : threads) {
        t.join();
    }

    return 0;
}

3. 使用互斥锁保护共享数据

使用 std::mutex 来保护共享数据,防止数据竞争。

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

std::mutex mtx;
int sharedData = 0;

void incrementSharedData() {
    std::lock_guard<std::mutex> lock(mtx); // 自动管理锁
    ++sharedData;
}

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

    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(incrementSharedData);
    }

    for (auto& t : threads) {
        t.join();
    }

    std::cout << "Shared data: " << sharedData << "\n";

    return 0;
}

4. 使用条件变量进行线程同步

使用 std::condition_variable 来进行线程间的同步。

#include <iostream>
#include <thread>
#include <mutex>
#include <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; });

    std::cout << "Worker thread is processing data\n";
}

void trigger() {
    std::this_thread::sleep_for(std::chrono::seconds(1));
    {
        std::lock_guard<std::mutex> lock(mtx);
        ready = true;
    }
    cv.notify_one();
}

int main() {
    std::thread worker(workerThread);
    std::thread triggerThread(trigger);

    worker.join();
    triggerThread.join();

    return 0;
}

5. 使用原子操作

对于简单的数据类型,可以使用 std::atomic 来避免锁的开销。

#include <iostream>
#include <thread>
#include <atomic>

std::atomic<int> sharedData(0);

void incrementSharedData() {
    ++sharedData;
}

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

    for (int i = 0; i < 10; ++i) {
        threads.emplace_back(incrementSharedData);
    }

    for (auto& t : threads) {
        t.join();
    }

    std::cout << "Shared data: " << sharedData << "\n";

    return 0;
}

总结

以上是一些基本的并发编程概念和示例代码。在实际应用中,你可能需要处理更复杂的并发场景,例如线程池、任务队列、读写锁等。C++标准库提供了丰富的工具来帮助你进行并发编程,合理使用这些工具可以提高程序的性能和可靠性。

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

推荐阅读:如何在Linux下用C++进行安全编程

0