我正在尝试实现并发BST,但是代码并没有像它应该的那样完全正常工作。我在这里写了引起问题的部分。
void* insertfunc(void* arg)
{
int r, i;
for(i = 0; i < size_of_tree; i++)
{
r = rand();
root = insert(root,r); //insert function is correct, it was tested on a serial BST
}
inorder(root); //here tree is printed properly
printf("\n");
return;
}
int main()
{
char c;
srand(time(NULL));
int i;
node* root = NULL;
pthread_t mythreads[4];
for(i=0; i<1; i++)
{
pthread_create(&mythreads[i],NULL, insertfunc,NULL);
}
for(i=0; i<1; i++)
{
pthread_join(mythreads[i],NULL);
}
printf("%d", root -> data); //here root is NULL and hence the segfault
}
return 0;
}
我的根是全局变量。我无法弄清楚为什么,虽然在我的线程中root的值在插入节点时正在改变,当线程终止并且我的主线程恢复完成执行时,为什么根又是NULL?
答案 0 :(得分:1)
有一个本地
node* root = NULL;
在main()
内,所以它总是为NULL。如果你有root
全局,那么删除它,因为我们看到它将始终为NULL。因此分段错误。