c++如何实现多线程问题
时间: 2024-01-26 10:05:12 浏览: 138
在 C++ 中,可以使用标准库提供的线程和同步原语来实现多线程问题。常用的头文件包括 `thread`、`mutex`、`condition_variable` 等。
创建线程可以使用 `std::thread` 类,例如:
```
void myFunc() {
// 线程执行的函数
}
int main() {
std::thread myThread(myFunc); // 创建一个新线程并执行 myFunc 函数
myThread.join(); // 等待线程执行完毕
return 0;
}
```
同时,为了避免多个线程同时访问共享资源导致数据竞争,需要使用同步原语来保护共享资源的访问。常用的同步原语包括 `std::mutex` 和 `std::condition_variable`,例如:
```
std::mutex myMutex;
std::condition_variable myCond;
void myFunc() {
std::unique_lock<std::mutex> myLock(myMutex);
// 等待条件变量满足
myCond.wait(myLock);
// 执行其他操作
}
int main() {
std::thread myThread(myFunc); // 创建一个新线程并执行 myFunc 函数
{
std::lock_guard<std::mutex> myLock(myMutex);
// 修改共享资源
}
myCond.notify_one(); // 发送通知,唤醒等待条件变量的线程
myThread.join(); // 等待线程执行完毕
return 0;
}
```
上面的代码中,使用 `std::unique_lock<std::mutex>` 对共享资源进行加锁,同时使用 `std::condition_variable` 等待条件变量满足。在主线程中修改共享资源后,通过 `myCond.notify_one()` 发送通知,唤醒等待条件变量的线程。
阅读全文