Trying to see how pthread works by running a simple program but I am getting segmentation fault (core dumped) at pthread_create
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
void* testfunc(void* arg) {
while (1) {
printf("testfunc");
}
}
int main(void) {
printf("helo\n");
if (pthread_create(NULL, NULL, &testfunc, NULL) != 0) {
perror("pthread failed to create\n");
}
while (1) {
printf("main function\n");
sleep(1000);
}
return 0;
}
What seems to be causing the problem? I am on Ubuntu 20.04 if that matters.
>Solution :
You can’t pass NULL
for pthread_create
‘s first argument.
Before returning, a successful call to
pthread_create()
stores the ID of the new thread in the buffer pointed to bythread
Also, pthread_create
doesn’t set errno
, so using perror
makes no sense, at least not without some prep.
on error, it returns an error number, and the contents of
*thread
are undefined.
Fixed:
pthread_t thread;
if ( ( errno = pthread_create(&thread, NULL, &testfunc, NULL) ) != 0 ) {
perror("pthread failed to create\n");
}
...
pthread_join(thread); // Normally.