C++ 多任务多线程 互斥锁
时间: 2024-09-12 22:14:47 浏览: 52
C++中的多任务多线程编程允许程序同时执行多个操作,提高程序的运行效率。为了在多线程环境中保护共享资源不被同时访问导致的冲突,互斥锁(Mutex)是一种常用的同步机制。互斥锁可以确保同一时刻只有一个线程可以访问特定的共享资源。
互斥锁的基本使用包括锁定(lock)和解锁(unlock)两个操作:
1. 当线程进入一个临界区(即需要访问共享资源的代码段)时,它会尝试获取互斥锁。
2. 如果该互斥锁当前未被其他线程持有,则该线程成功获取锁,并进入临界区。
3. 如果互斥锁已被其他线程持有,当前线程将被阻塞,直到互斥锁被释放。
4. 当线程完成对共享资源的操作后,它必须释放互斥锁,以便其他线程可以获取该锁并访问共享资源。
在C++11及以后的版本中,可以使用`<mutex>`库中的类和函数来实现互斥锁。这里有一个简单的例子:
```cpp
#include <iostream>
#include <mutex>
#include <thread>
std::mutex mtx; // 创建互斥锁对象
void print_block(int n, char c) {
// 上锁
mtx.lock();
for (int i = 0; i < n; ++i) {
std::cout << c;
}
// 解锁
mtx.unlock();
}
int main() {
std::thread th1(print_block, 50, '*');
std::thread th2(print_block, 50, '#');
th1.join();
th2.join();
return 0;
}
```
在这个例子中,`print_block`函数使用互斥锁来确保在任何时刻只有一个线程可以打印字符到控制台。
阅读全文