이 프로그램은이 스레드의 고유 번호를 표준 출력에 인쇄하는 TaskCode 함수를 실행하는 5 개의 스레드를 만듭니다.스레드의 속성을 만들고 표시하는 방법
제 질문은 스레드의 속성을 만들고 표시하는 방법입니다.
이 프로그램은이 스레드의 고유 번호를 표준 출력에 인쇄하는 TaskCode 함수를 실행하는 5 개의 스레드를 만듭니다.스레드의 속성을 만들고 표시하는 방법
제 질문은 스레드의 속성을 만들고 표시하는 방법입니다.
pthread_attr_init(3)
맨 페이지에는 스레드에서 사용할 수있는 속성을 검색하는 방법을 보여주는 샘플 프로그램이 포함되어 있습니다.
static void
display_pthread_attr(pthread_attr_t *attr, char *prefix)
{
int s, i;
size_t v;
void *stkaddr;
struct sched_param sp;
s = pthread_attr_getdetachstate(attr, &i);
if (s != 0)
handle_error_en(s, "pthread_attr_getdetachstate");
printf("%sDetach state = %s\n", prefix,
(i == PTHREAD_CREATE_DETACHED) ? "PTHREAD_CREATE_DETACHED" :
(i == PTHREAD_CREATE_JOINABLE) ? "PTHREAD_CREATE_JOINABLE" :
"???");
s = pthread_attr_getscope(attr, &i);
if (s != 0)
handle_error_en(s, "pthread_attr_getscope");
printf("%sScope = %s\n", prefix,
(i == PTHREAD_SCOPE_SYSTEM) ? "PTHREAD_SCOPE_SYSTEM" :
(i == PTHREAD_SCOPE_PROCESS) ? "PTHREAD_SCOPE_PROCESS" :
"???");
s = pthread_attr_getinheritsched(attr, &i);
if (s != 0)
handle_error_en(s, "pthread_attr_getinheritsched");
printf("%sInherit scheduler = %s\n", prefix,
(i == PTHREAD_INHERIT_SCHED) ? "PTHREAD_INHERIT_SCHED" :
(i == PTHREAD_EXPLICIT_SCHED) ? "PTHREAD_EXPLICIT_SCHED" :
"???");
s = pthread_attr_getschedpolicy(attr, &i);
if (s != 0)
handle_error_en(s, "pthread_attr_getschedpolicy");
printf("%sScheduling policy = %s\n", prefix,
(i == SCHED_OTHER) ? "SCHED_OTHER" :
(i == SCHED_FIFO) ? "SCHED_FIFO" :
(i == SCHED_RR) ? "SCHED_RR" :
"???");
s = pthread_attr_getschedparam(attr, &sp);
if (s != 0)
handle_error_en(s, "pthread_attr_getschedparam");
printf("%sScheduling priority = %d\n", prefix, sp.sched_priority);
s = pthread_attr_getguardsize(attr, &v);
if (s != 0)
handle_error_en(s, "pthread_attr_getguardsize");
printf("%sGuard size = %d bytes\n", prefix, v);
s = pthread_attr_getstack(attr, &stkaddr, &v);
if (s != 0)
handle_error_en(s, "pthread_attr_getstack");
printf("%sStack address = %p\n", prefix, stkaddr);
printf("%sStack size = 0x%x bytes\n", prefix, v);
}
pthread_attr_*()
기능 집합을 사용해야합니다. This 링크는 좋은 설명이 있습니다.
이 작업을 수행하는 신뢰할 수있는 유일한 방법은 하나를 통해는 pthread_create 동안 전달 된 않은 setattr를 저장하는 것입니다 :하는 API는 현재 스레드의 속성을 반환 할 수 있습니다 따라서 pthread_t
스레드 식별자를 지정 허용하지 않습니다 단일 랩퍼 및 감사/가져 오기 목적으로 랩퍼를 u 리하십시오. 이것은 리눅스 커널 2.6.34 버전에 대한 나의 경험을 기반으로하고 있으며 pthread_attr_getxxxx apis는 신뢰할 만하지 않습니다. 다음은
pthread_attr_setscope = PTHREAD_SCOPE_SYSTEM
pthread_attr_setinheritsched = PTHREAD_EXPLICIT_SCHED
pthread_attr_setschedpolicy = SCHED_FIFO
pthread_attr_setguardsize = 1k;
pthread_attr_setstacksize = 32K;
및 스레드 함수 쿼리 내에서 속성
attr에 설정하여 pthread를 만들기 내 대답을의 유효성을 검사하는 간단한 테스트입니다 값. 확실히 schedpolicy와 상속 된 매개 변수의 차이를 확인합니다. pthread_attr_getxxx 당신이 얘기 "속성"여기에서 다른 OS 용
실패 이유
당신은 항상 같은 명령을 사용하여 속성 중 일부는 I가 유사한 게시물을 볼 확인할 수? –
@DavidSchwartz 내 질문을 업데이트했습니다. – EnexoOnoma
아직 어떤 속성에 대해 이야기하고 있는지 알지 못합니다. 스택 크기와 같은 POSIX pthread 생성 속성을 의미합니까? –