1. pthread 개요

System Program/pthread 2013. 5. 27. 08:15

1. 역사

 

1996년에 처음 리눅스에서 리눅스쓰레드(LinuxThread)를 지원했으나 현재의 모습과는 달리 Thread를 라이블러리 형태로 지원하였다. 이 형태는 POSIX표준과 약간의 불일치점이 있었는데 큰 차이는 신호처리 부분이다.

 

리눅스는 다양한 프로젝트를 거치면서 NPTL(Native POSIX Thread Library)이라는 새로운 표준으로 자리잡았으며 이는 레드헷 9부터 지원하기 시작했다. NPTL은 POSIX표준을 따르도록 수정하기보다는 사용단의 Thread를 커널 수준의 쓰레드로 대응하는 방안으로 초점을 맞쳐서 개선활동을 하였다.

 

우리가 Thread를 사용하여 User단에 기능 구현을 하지만 실제 커널은 프로세스와 쓰레드는 크게 차이는 없다. 차이는 프로세스가 Fork를 통해서 새로 생성되면 자식프로세스는 부모프로세스와 독립된 객체 반면 쓰레드는 자신이 생성한 지역변수를 제외한 프로세스가 생성한 전역변수, 파일설명자, 신호처리기, 현재 디렉토리 상태에 대한 정보를 공유한다.

 

2. 쓰레드마다 고유한 속성

 

생성된 쓰레드들은 프로세스내에 존재하고 같은 가상메모리상에 있으므로 대부분의 프로세스의 자원을 공유한다. 다만 아래와 같은 속성은 쓰레드마다 독립적으로 관리한다.

 

  • 쓰레드 ID
  • 시그널 마스크
  • 쓰레드 고유 데이터
  • 대체 시그널 스택
  • errno 값
  • 부동 소수점 환경
  • 실시간 스케쥴링 정책과 우선순위
  • CPU 친화도
  • 능력
  • 스택

 

3. Pthread 함수의 리턴값

 

시스템 호출과 일부 라이블러리 함수에서 상태를 리턴하는 전통적인 방법은 성공하면 '0'을 리턴하고 에러가 발생하면 음수를 리턴하고 errno를 설정해 에러를 알리는 구조이다.

하지만 Pthread API 함수는 성공하면 '0'을, 실패하면 양수를 리턴한다. 이 점이 주의해야 할 사항이다.

 

4. pthread 사용을 위한 선행 작업

 

1) -D_REENTRANT Define 정의

 

2) include pthread.h

 

3) -lpthread : 라이블러리 Link

 

* NPTL의 헤더와 라이블러리 Path

- /usr/include/nptl,  /usr/lib/nptl (이 PATH는 CFLAGS나 LDFLAGS에 포함시킬 없다)

 

3. References

 

https://computing.llnl.gov/tutorials/pthreads/

 

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/Thread/Beginning/PthreadApiReference

 

 

 

 

'System Program > pthread' 카테고리의 다른 글

2. pthread 생성  (0) 2014.03.07
6. pthread attribute - (2)  (0) 2013.07.12
8. 쓰레드 클린업 핸들러(쓰레드 취소와 연관)  (0) 2013.07.03
5. pthread attributes  (0) 2013.07.02
7. 쓰레드 취소  (0) 2013.01.01
: