Я пытаюсь просто вставить в параллельный связанный список. мой код всегда дает мне ошибку сегментации (ядро сброшено), когда я пытаюсь использовать функцию list_insert, и я не могу понять, почему. Начиная с пустого списка, в котором запущены два потока одновременно, я пытаюсь вставить 1 миллион случайных целых чисел в каждый список. Я приложил свой код. Спасибо за помощь
// basic node structure
typedef struct __node_t {
int key;
struct __node_t *next;
} node_t;
//basic list structure (one used per list)
typedef struct __list_t {
node_t *head;
pthread_mutex_t lock;
} list_t;`
void List_Init(list_t *L) {
L->head == NULL;
pthread_mutex_init(&L->lock, NULL);
}
void List_Insert(list_t *L, int key) {
// synchronization not neded
node_t *new = malloc(sizeof(node_t));
if (new == NULL){
perror("malloc");
return;
}
new->key = key;
// just lock cricical section
pthread_mutex_lock(&L->lock);
new->next = L->head;
L->head = new;
pthread_mutex_unlock(&L->lock);
}
Основная функция
//main function
int main(int argc, char** argv){
// create random number
srand(time(0));
//create list
list_t *the_list;
List_Init(the_list);
struct timeval start, stop;
// start of timer
gettimeofday(&start, NULL);
printf(" %d ", rand());
List_Insert(the_list, 1);
//stop timer
gettimeofday(&stop, NULL);
//get time passed
double time;
time = (stop.tv_sec - start.tv_sec) * 1e6;
time = (time + (stop.tv_usec - start.tv_usec)) * 1e-6;
printf("Time Passed: %f\n", time);
return 0;