Linux虚拟机中编写一个双线程打印程序,在C++中创建2个线程,实现依次打印0~100的任务,在执行当中加入互斥锁,使2个进程互斥执行打印,同步完成任务操作。请帮我写出这个程序
时间: 2024-12-12 21:19:23 浏览: 4
在Linux虚拟机中,我们可以使用C++的`std::thread`库以及`std::mutex`来进行线程同步。以下是一个简单的示例,展示了如何创建两个线程,它们按照顺序打印数字0到100,并通过互斥锁确保互斥执行:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 创建一个互斥锁
// 这个函数将在每个线程中运行
void printNumbers(int start, int end) {
for (int i = start; i <= end; ++i) {
std::lock_guard<std::mutex> lock(mtx); // 获取锁并开始执行
std::cout << "Thread " << std::this_thread::get_id() << ": " << i << "\n";
// 释放锁,让其他线程有机会执行
lock.unlock();
}
}
int main() {
// 创建两个线程,分别处理0到50和51到100
std::thread thread1(printNumbers, 0, 50);
std::thread thread2(printNumbers, 51, 100);
// 等待所有线程结束
thread1.join();
thread2.join();
return 0;
}
```
在这个例子中,我们使用`std::lock_guard`自动获取和释放互斥锁,确保在同一时刻只有一个线程能够访问临界区(打印数字的部分)。这样就保证了打印过程的顺序。
阅读全文