并发BST插入功能不起作用

时间:2014-11-30 15:45:20

标签: c multithreading concurrency

我正在尝试实现并发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?

1 个答案:

答案 0 :(得分:1)

有一个本地

node* root = NULL;

main()内,所以它总是为NULL。如果你有root全局,那么删除它,因为我们看到它将始终为NULL。因此分段错误。