在 Linux 上设计 C++ 多线程程序时,需要考虑以下几个方面:
<iostream>
、<thread>
、<mutex>
、<condition_variable>
等头文件。#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex
来保护一个全局变量。std::mutex mtx;
std::condition_variable
来实现这一功能。std::condition_variable cv;
void thread_function(int id) {
// 线程任务代码
}
std::thread
类创建线程,并将线程函数作为参数传递。例如:std::thread t1(thread_function, 1);
std::thread t2(thread_function, 2);
join()
或 detach()
方法等待线程完成。join()
方法会阻塞当前线程,直到被调用 join()
的线程完成。detach()
方法则会将线程设置为分离状态,当前线程不会等待该线程完成。t1.join();
t2.join();
std::unique_lock<std::mutex> lock(mtx);
// 访问共享资源
cv.notify_one(); // 通知其他线程
这是一个简单的 C++ 多线程示例:
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
int shared_resource = 0;
void thread_function(int id) {
std::unique_lock<std::mutex> lock(mtx);
std::cout << "Thread " << id << " is waiting.\n";
cv.wait(lock); // 等待条件变量
shared_resource += 1;
std::cout << "Thread " << id << " has incremented the shared resource to " << shared_resource << ".\n";
cv.notify_one(); // 通知其他线程
}
int main() {
std::thread t1(thread_function, 1);
std::thread t2(thread_function, 2);
t1.join();
t2.join();
return 0;
}
这个示例中,两个线程等待一个条件变量,然后递增共享资源。当条件变量被通知时,线程会继续执行并更新共享资源。