C++ pthread连接有时不起作用
c++ pthread join sometimes doesn't work
我正在尝试在c++中使用pthread
我用pthread编写了一个mergesort,但有时在pthread_join中,我的代码会出现分段错误。(请参阅代码调试信息)
例如,对于输入:
4
5 1 2 3
输出为:
** size is more than 2 **
I'm alive!
create 1: 0
create 2: 0
After creating!
i want to exit ... 2 1
i want to exit ... 2 2
join 1: 0
Segmentation fault
当它想要加入pthead编号2时,就会出现分段错误
提前感谢!
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<pthread.h>
using namespace std;
struct toSort
{
int size;
int * arr;
toSort(int _size = 0, int * _arr = NULL)
{
size = _size;
arr = _arr;
}
};
void * mergeSort(void *args)
{
toSort * m = static_cast<toSort*>(args);
if(m -> size == 1)
{
pthread_exit(NULL);
}
else if(m -> size == 2)
{
if(*(m -> arr) > *((m -> arr) + 1))
{
int temp = *(m -> arr);
* (m -> arr) = *((m -> arr) + 1);
* ((m -> arr) + 1) = temp;
}
}
else
{
cerr << "** size is more than 2 **" << endl;
int ind = (m -> size) / 2;
pthread_t t1, t2;
toSort *m1, *m2;
m1 = new toSort(ind, (m -> arr));
m2 = new toSort((m -> size) - ind, ((m -> arr) + ind));
cerr << "I'm alive!" << endl;
cerr << "create 1: " << pthread_create( &t1, NULL, &mergeSort, static_cast<void*>(m1)) << endl;
cerr << "create 2: " << pthread_create( &t1, NULL, &mergeSort, static_cast<void*>(m2)) << endl;
cerr << "After creating!" << endl;
cerr << "join 1: " << pthread_join(t1, NULL) << endl;
cerr << "join 2: " << pthread_join(t2, NULL) << endl;
cerr << "After join!" << endl;
// merge(m -> arr, ind, m -> size);
}
cout << "i want to exit ... " << (m -> size) << " " << (*(m -> arr)) << endl;
pthread_exit(NULL);
return 0;
}
int main()
{
int n, arr[100];
// Read
cin >> n;
for(int i = 0; i < n; i++)
cin >> arr[i];
// Solve
toSort * ans = new toSort(n, arr);
pthread_t getAns;
pthread_create( &getAns, NULL, &mergeSort, static_cast<void*>(ans));
pthread_join(getAns, NULL);
// Write
for(int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
您有一个打字错误
cerr << "create 2: " << pthread_create( &t1, NULL, &mergeSort, static_cast<void*>(m2)) << endl;
第二个线程应该使用t2
而不是t1
。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- QObject::连接不起作用 - 使用函数语法找不到信号
- Microsoft具有本机消息传递和非持久连接的边缘扩展不起作用
- SQL Server 2017 C++ ODBC 连接在 Linux 上不起作用
- QT连接到按钮不起作用
- 连接另一个在Qt中不起作用的类的插槽
- 窗口处于全屏模式时,QT连接不起作用
- 在 c++ 中,如何远程设置注册表项(连接工作正常,但设置不起作用!
- 连接() 不起作用
- Qt连接不起作用
- qt MYSQL 连接在 Windows 上不起作用
- C++ pthread连接有时不起作用