5. pthread attributes
System Program/pthread 2013. 7. 2. 17:151. pthread attributes
int pthread_attr_init(pthread_attr_t *attr);
int pthread_attr_destroy(pthread_attr_t *attr);
성공하면 '0'을 리턴, 에러가 발생하면 에러 번호(양수)를 리턴한다.
pthread_create() 함수의 두 번째 인자인 const pthread_attr_t *attr에 NULL을 넘기면 default값이 설정된다.
Default값 이외의 값을 설정하고자 할 때, 위의 attribute설정 함수들을 사용한다.
Attribute의 설정은 이 기본값을 쓰레드 생성시 변경할 수 있지만 생성 후에는 변경 할 수 없다.
2. 예제
pthread_detach()함수 대신에 attribute 설정을 통하여 thread 생성 시, detachable하게 생성할 수 있다.
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> #include "common.h" void *SI_ProcessTSFilter(void *pData) { UINT16 PID = 0x00; FILE *fp = NULL; UINT32 nRead = 0; UINT8 buffer[188] = {0, }; UINT32 filesize = 0; fp = fopen("hurrycain.ts", "rb"); if(!fp) { printf("fopen error \n"); } while(1) { nRead = fread(buffer, 1, 188, fp); if(nRead < 188) break; if(buffer[2] == 0) printf("TS Header = %#x %#x %#x\n", buffer[0], buffer[1], buffer[2]); } fclose(fp); pthread_exit(0); } int main(int argc, char *argv[]) { int opt; pthread_t tid; pthread_attr_t attr; int s; // Initialize attribute structure s = pthread_attr_init(&attr); if(s != 0) { printf("pthread_attr_init error \n"); exit(1); } s = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if(s != 0) { printf("pthread_attr_setdetachstate error \n"); exit(1); } s = pthread_create(&tid, &attr, SI_ProcessTSFilter, NULL); if(s != 0) { printf("pthread_create error \n"); exit(1); } s = pthread_attr_destroy(&attr); if(s != 0) { printf("pthread_attr_destory error \n"); exit(1); } while((opt = getchar()) != 'q'); return 0; }
그 밖의 스택사이즈/우선순위/CPU 친화도 등 attribute설정하는 함수는 여러가지 존재한다.
create생성함수와 attribute 설정 함수 등을 하나로 뭉쳐서 설계하면 더 좋은 구조가 될 것이라 본다.
'System Program > pthread' 카테고리의 다른 글
2. pthread 생성 (0) | 2014.03.07 |
---|---|
6. pthread attribute - (2) (0) | 2013.07.12 |
8. 쓰레드 클린업 핸들러(쓰레드 취소와 연관) (0) | 2013.07.03 |
1. pthread 개요 (0) | 2013.05.27 |
7. 쓰레드 취소 (0) | 2013.01.01 |