在C++中,可以使用std::mutex
互斥量来实现对共享资源的保护。下面是一个示例程序,展示了不同线程对同一个互斥锁进行多次加锁的解决方法:
#include
#include
#include
std::mutex mtx; // 定义互斥锁
void printNum(int num) {
mtx.lock(); // 加锁
for (int i = 0; i < 5; ++i) {
std::cout << num << " ";
}
std::cout << std::endl;
mtx.unlock(); // 解锁
}
int main() {
std::thread t1(printNum, 1);
std::thread t2(printNum, 2);
t1.join();
t2.join();
return 0;
}
在上面的示例中,我们定义了一个std::mutex
互斥锁,并在printNum
函数中使用mtx.lock()
和mtx.unlock()
来加锁和解锁。这样,当一个线程进入printNum
函数时,其他线程将被阻塞,直到当前线程完成打印操作并释放互斥锁。
这样,无论是线程1还是线程2,每次只有一个线程能够获得互斥锁,从而保证了共享资源(标准输出流cout)的安全访问。
上一篇:不同线程调用cuda流
下一篇:不同线程访问的共享容器