2017-12-13 10 views
0

내 프로그램을 스레드로 실행하려고하는데, 나는 pthread_create()을 사용하지만 스레드를 즉시 실행한다. 사용자가 실행하기 전에 우선 순위를 변경할 수있게하고 싶습니다. 어떻게 해결할 수 있습니까? 당신이 당신의 pthread_create() 호출 NULL을 지정한 경우 스레드 속성이 이동 : pthreads의 우선 순위 쓰레드 생성 후 설정이 아니라 쓰레드 생성에 적합한 특성을 전달하여하지 않습니다를 들어스레드를 만들지 만 리눅스에서 즉시 실행하지 마라.

for(int i = 0; i < threads; i++) 
{ 
    pthread_create(data->threads+i,NULL,SelectionSort,data); 
    sleep(1); 
    print(data->array); 
} 
+0

당신이 PM100 @는 pthread_create – pm100

+0

의 ATTR 인수를 사용하여 우선 순위를 설정할 수있는 방법, 나는 우선 순위를 설정하는 방법을 알고에

int local_errno; local_errno = pthread_create(..., NULL, ...); if (local_errno != 0) { ... } 

문제가하지 않는 방법입니다 생성 된 스레드를 즉시 실행하지만 실행 전에 사용자가 실행하거나 우선 순위를 변경할 수 있도록하십시오. –

+1

C++을 사용하는 코드 (BAD) 이미지를보십시오. 이유가없는 한 C 및 C++ 태그를 지정하지 마십시오. C++로 코딩하고 C++에만 태그를 붙입니다. 감사합니다. – Stargateur

답변

2

스레드를 만들 때 우선 순위를 설정하십시오.

교체는

int local_errno; 

pthread_attr_t attr; 
local_errno = pthread_attr_init(&attr); 
if (local_errno != 0) { ... } 

{ 
    struct sched_param sp; 
    local_errno = pthread_attr_getschedparam(&attr, &sp); 
    if (local_errno != 0) { ... } 

    sp.sched_priority = ...; 

    local_errno = pthread_attr_setschedparam(&attr, &sp); 
    if (local_errno != 0) { ... } 
}  

/* So our scheduling priority gets used. */ 
local_errno = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); 
if (local_errno != 0) { ... } 

local_errno = pthread_create(..., &attr, ...); 
if (local_errno != 0) { ... } 

local_errno = pthread_attr_destroy(&attr); 
if (local_errno != 0) { ... } 
+0

내가 너와 같으려고하는데 실패 했어. 실수 일 수있는 곳은 어디에도 없어. https://pasteboard.co/GY3urhX.png –

+0

이미지에 대해 뭐라 말 했니?!? 그리고 그것은 내가 올린 것과 비슷하지 않습니까?!? – ikegami

+0

사진에 대한 링크를 제공하는 것이 나쁜 이유는 무엇입니까? 자, 내가 게시 한 코드를 재정렬하는 방법? –

1

. 사용자가 우선 순위를 부여 할 때까지 스레드 생성을 지연시키고 자한다면, 우선 순위를 기대하는 함수 객체를 생성 할 수 있고, 그 함수 객체를 호출하면 스레드를 시작할 수 있습니다. 물론 나중에 생성 된 객체 (나중에 std::future<...>과 같은 객체 사용)를 추적해야 나중에 해당 스레드에 참여해야합니다.

답변을 제공해도 스레드 우선 순위를 보증하는 것으로 해석되어서는 안됩니다. 제가 말할 수있는 한, 스레드 우선 순위로 재생하는 것은 바람직하지 않습니다.

관련 문제