pthread分割故障
Pthread segmentation fault
以下代码已在C 中编写,以运行带有两个线程的奇数排序。我在执行时收到了一个细分错误。我在第55、57和62行的GDB中尝试了GDB。但是在这些断点后,细分误差跃升了。无法弄清楚错误在哪里。
#include <iostream>
#include <pthread.h>
#define num 2
pthread_mutex_t mutex1=PTHREAD_MUTEX_INITIALIZER;
using namespace std;
nt arr[]={10,9,23,45,78,11,89,45,92,5,23,76,34,21,59,76};
void* odd_even(void* data){
int a=*((int*)data);
int temp;
bool sorted=false;
pthread_mutex_lock(&mutex1);
while(!sorted){
if(a==0){
sorted=true;
for(int i=0;i<sizeof(arr)-1;i+=2){
if(arr[i]>arr[i+1]){
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
sorted=false;
}
}
}
else if(a==1){
sorted=true;
for(int i=1;i<sizeof(arr)-1;i+=2){
if(arr[i]>arr[i+1]){
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
sorted=false;
}
}
}
}//end while
pthread_mutex_unlock(&mutex1);
//pthread_exit(NULL);
}
int main(){
//int arr[]={10,9,23,45,78,11,89,45,92,5,23,76,34,21,59,76};
nt a[]={0,1,2};
int thread_id;
thread_t pth[num];
pthread_t dthread;
for(int i=0;i<num;i++){
thread_id=pthread_create(&pth[i],NULL,odd_even,(void*)&a[i]);
if(thread_id){
cout<<"Thread creation fail"<<endl;
return 0;
}
}
for(int j=0;j<num;j++)
pthread_join(pth[j],NULL);
pthread_exit(NULL);
return 0;
}
您的代码有许多问题,
- 计算数组的长度应作为
sizeof(arr)/sizeof(arr[0])
进行 - 努力奇数和偶数应该将索引增加2而不是1
与这样的事情有一个:
void* odd_even(void* data)
{
int a=*((int*)data);
volatile bool sorted=false;
unsigned int arr_length = sizeof(arr)/sizeof(arr[0]);
pthread_mutex_lock(&mutex1);
while(!sorted) {
if (a==0) {
sorted=true;
for(unsigned int i=0; i < arr_length-2; i+=2) {
if(arr[i] > arr[i+2]){
std::swap(arr[i], arr[i+2]);
sorted=false;
}
}
}
else if (a==1) {
sorted=true;
for(unsigned int i=1; i < arr_length-2; i+=2){
if(arr[i] > arr[i+2]){
std::swap(arr[i], arr[i+2]);
sorted=false;
}
}
}
}//end while
pthread_mutex_unlock(&mutex1);
pthread_exit(NULL);
return nullptr;
}
编辑。请参阅LIVE。
相关文章:
- 分割故障C++矩阵
- C ,二进制树的高度,而不是检查我的子树是否为空,而是在检查我的子树是否是叶子节点.抛出分割故障
- 我正在为此代码分割故障
- 在执行strcpy时获取分割故障错误
- 空隙指针分割故障
- Xcode会产生分割故障,而不是例外
- OPENCV C 中的分割故障误差
- 分割故障:核心倾倒C 矢量对字符串:
- C 2D数组导致分割故障(核心倾倒)
- 分割故障/错误读数变量-C 列表
- DLSYM导致分割故障
- 使用C 中的操作员删除的分割故障
- 使用Linux X64下的Libmozjs-52(SpidermonKey)进行分割故障
- 使用长变量时分割故障(11)错误
- C - 返回字符串时的分割故障
- 创建VertexArray时的分割故障
- 向量分割故障的向量
- 从std :: fileSystem ::路径对象的类中退出时的分割故障
- C 矢量分割故障
- 基于向量的数据格式的分割故障误差