小能豆

C++ 多线程编程和同步机制:详解和实例演示

javascript

C++ 多线程编程和同步机制:详解和实例演示


阅读 47

收藏
2024-06-09

共1个答案

小能豆

C 多线程编程和同步机制是利用 C 标准库中的 <thread><mutex><condition_variable> 等头文件来实现的。以下是对 C++ 多线程编程和同步机制的详解和实例演示:

1. 创建和管理线程

C++11 引入了 <thread> 头文件,提供了创建和管理线程的标准接口。使用 std::thread 类可以创建新的线程。

#include <iostream>
#include <thread>

// 线程函数
void threadFunction() {
    std::cout << "Hello from thread!" << std::endl;
}

int main() {
    // 创建新线程
    std::thread t(threadFunction);

    // 等待线程结束
    t.join();

    return 0;
}

2. 同步机制:互斥量

互斥量(Mutex)是一种用于保护共享资源的同步机制。C++ 提供了 std::mutex 类来实现互斥量。使用 std::lock_guard 类可以自动管理互斥量的加锁和解锁。

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

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

void threadFunction() {
    // 加锁
    std::lock_guard<std::mutex> lock(mtx);
    std::cout << "Hello from thread!" << std::endl;
    // 自动解锁
}

int main() {
    // 创建新线程
    std::thread t(threadFunction);

    {
        // 主线程加锁
        std::lock_guard<std::mutex> lock(mtx);
        std::cout << "Hello from main!" << std::endl;
    } // 自动解锁

    // 等待线程结束
    t.join();

    return 0;
}

3. 同步机制:条件变量

条件变量(Condition Variable)是一种用于线程间通信的同步机制,用于等待某个条件达成。C++ 提供了 std::condition_variable 类来实现条件变量。

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

std::mutex mtx; // 全局互斥量
std::condition_variable cv; // 全局条件变量
bool ready = false; // 共享条件

void threadFunction() {
    // 等待条件变量满足
    std::unique_lock<std::mutex> lock(mtx);
    cv.wait(lock, []{ return ready; });
    std::cout << "Hello from thread!" << std::endl;
}

int main() {
    // 创建新线程
    std::thread t(threadFunction);

    {
        // 修改条件
        std::lock_guard<std::mutex> lock(mtx);
        ready = true;
    }
    // 通知条件变量
    cv.notify_one();

    // 等待线程结束
    t.join();

    return 0;
}

通过使用互斥量和条件变量,可以实现线程之间的同步和通信,保护共享资源并防止竞态条件的发生。这是 C++ 多线程编程中非常重要的一部分。

2024-06-09