多线程同步正确实现冒泡程序C++
时间: 2024-03-26 14:34:06 浏览: 61
下面是一个使用多线程同步实现冒泡排序的C++程序,确保线程同步的正确性:
```c++
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
const int N = 10;
int a[N] = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
mutex mtx;
condition_variable cv;
void bubble_sort(int start, int end) {
for (int i = start; i < end; i++) {
for (int j = start; j < end - i - 1; j++) {
if (a[j] > a[j + 1]) {
swap(a[j], a[j + 1]);
}
}
unique_lock<mutex> lock(mtx);
cv.notify_all();
if (i != end - 1) {
cv.wait(lock);
}
}
}
int main() {
thread t1(bubble_sort, 0, 5);
thread t2(bubble_sort, 5, 10);
int i = 0;
while (i < N) {
unique_lock<mutex> lock(mtx);
cv.wait(lock);
cv.notify_all();
for (int j = 0; j < N; j++) {
cout << a[j] << " ";
}
cout << endl;
i++;
}
t1.join();
t2.join();
return 0;
}
```
与之前的程序相比,这个程序在每个子线程内部等待主线程发出的信号之前,先发出一个信号通知主线程可以打印结果了。同时,在主线程打印结果后,也需要再发出一个信号通知子线程可以继续排序了。这样可以确保线程同步的正确性,避免了死锁和线程饥饿等问题。
阅读全文