thread 예제

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가 전부인가 보다.

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.