多线程互斥量实现冒泡程序C++
时间: 2024-03-25 15:41:51 浏览: 79
以下是使用互斥量实现冒泡排序的 C++ 代码示例:
```c++
#include <iostream>
#include <thread>
#include <mutex>
#include <chrono>
#include <random>
#define ARRAY_SIZE 10
using namespace std;
int arr[ARRAY_SIZE];
mutex mtx;
void bubble_sort(int start, int end)
{
for (int i = start; i < end; i++)
{
for (int j = start; j < end - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
mtx.lock(); // 加锁
swap(arr[j], arr[j + 1]);
mtx.unlock(); // 解锁
}
}
}
}
int main()
{
// 初始化数组
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<int> dis(1, 100);
for (int i = 0; i < ARRAY_SIZE; i++)
{
arr[i] = dis(gen);
}
// 创建线程
thread t1(bubble_sort, 0, ARRAY_SIZE / 2);
thread t2(bubble_sort, ARRAY_SIZE / 2, ARRAY_SIZE);
// 等待线程结束
t1.join();
t2.join();
// 输出排序结果
for (int i = 0; i < ARRAY_SIZE; i++)
{
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
```
在上面的示例中,使用了互斥量来保护共享资源 arr 数组。在 bubble_sort 函数中,使用了 mtx.lock() 和 mtx.unlock() 来加锁和解锁互斥量。在 main 函数中,创建了两个线程来执行 bubble_sort 函数,每个线程处理数组的一半。最后,输出排序结果。
阅读全文