프로그램 목적
각각 매개변수의 값 (0~9)를 출력하는 10개의 쓰레드를 생성하여
화면에 쓰레드 아이디-매개변수값 0~9를 출력하는 프로그램을 만들어보자.
도중에 쓰레드 생성에 실패하면 실패 에러메시지를 띄우고 해당 id의 쓰레드의 값은 출력하지 않고 다음라인으로 넘어간다!
이 코드에는 문제가 있다!
모든 쓰레드가 0~9이 아니라 10을 출력한다
for (i = 0; i < NUMTHREADS; i++)
if (perror = pthread_create(tid + i , NULL, printarg, (void *)&i))
{
// ~~ (중략)
}
이 코드가 원인이다.
사실 pthread_create를 호출하면 메인은 OS에게 "쓰레드를 생성해줘!"라고 요청을 보내고
'요청에 성공!'하기만 하면 0을 바로 리턴받는다.
(실제로 쓰레드가 생성되기 전에 요청 성공여부만 알면 바로 리턴받기 때문에)
for loop이 다 돌아버린 상태 (i는 10이 되버리고 ) 에서 쓰레드를 생성했기 때문이다..
그래서 임시 해결책!
0~9 깔끔히 성공!
얼핏 보면 좋은 해결책 처럼 보이지만
사실 쓰레드를 생성하는데 1초미만의 시간이 걸린다는 가정 하에 코드를 짠것이다..
실제로 쓰레드 생성 속도가 1초 이상이 걸리면 이 코드도 문제를 발생시킨다.
📝 결론
pthread_create함수를 호출했을 경우 main이 OS에게 '요청 성공'만하면 0을 리턴받는다!
(실제로 쓰레드가 생성된 후가 아니라!)
'LINUX > Linux' 카테고리의 다른 글
Signal 생성 함수, 예제 (0) | 2019.06.15 |
---|---|
Signal 개념 (0) | 2019.06.15 |
pthread 함수 예제 (0) | 2019.06.15 |
vim, vi Editor 라인별 복사 / 삭제 / 붙여넣기 명령어 (0) | 2019.06.07 |
하드 링크 , 심볼릭 링크 개념과 간단한 실험예제 (0) | 2019.06.06 |