linux system programming, 234p
https://bitsoul.tistory.com/m/157 여기 참조.
#include <pthread.h> #include <stdio.h> #include <unistd.h> void* start_routine(void* arg ){ int pid; int threadID; pid= getpid(); printf("pid is %d\n", pid); threadID = pthread_self(); printf("tid is %lu\n",threadID); printf("data is %s\n",arg); } int main(){ pthread_t thread[2]; const char *message1="hello one"; const char *message2="hello two"; const char *message3="hello main"; int ret, errorno; ret = pthread_create(&thread[0],NULL,start_routine,(void*)message1); if(ret<0){ errorno = ret; //printf("%d\n",errorno); perror("pthread_create"); return -1; } ret = pthread_create(&thread[1],NULL,start_routine,(void*)message2); if(ret<0){ errorno = ret; //printf("%d\n",errorno); perror("pthread_create"); return -1; } /* for(int i=0;i<2;i++){ ret = pthread_create(&thread[i],NULL,start_routine,NULL); if(!ret){ errorno = ret; printf("%d\n",errorno); perror("pthread_create"); return -1; } } */ int thread_compare=0; //스레드가 다르면 0, 같으면 0이 아는 수 리턴. //다른 스레드로 0을 리턴. thread_compare = pthread_equal(thread[0], thread[1]); printf("thread is same? %d\n",thread_compare); sleep(1); //메인에서 start_routine. start_routine((void*)message3); //각 스레드 끝나길 대기 pthread_join(thread[0],NULL); pthread_join(thread[1],NULL); return 0; }
위 코드를 실행하면 아래와 같다. race condition으로 매 실행 다른 결과를 보았다.
pi@raspberrypi:~/Project/cCode/systemProgram $ gcc -lpthread mythread.c ;./a.out thread is same? -1235590048 pid is 14996 tid is 3059377248 data is hello two pid is 14996 tid is 3067769952 data is hello one pid is 14996 tid is 3069673600 data is hello main pi@raspberrypi:~/Project/cCode/systemProgram $ gcc -lpthread mythread.c ;./a.out pid is 15068 tid is 3067769952 data is hello one pid is 15068 tid is 3059377248 data is hello two thread is same? 0 pid is 15068 tid is 3069673600 data is hello main pi@raspberrypi:~/Project/cCode/systemProgram $ gcc -lpthread mythread.c ;./a.out pid is 15125 tid is 3068077152 data is hello one thread is same? 0 pid is 15125 tid is 3059684448 data is hello two pid is 15125 tid is 3069980800 data is hello main
gnu c는 pthread가 전부인가 보다.