Linux 환경에서 개발 중입니다. 내 소프트웨어에서 3 개의 스레드, t1, t2 및 t3이 실행되고 있다고 가정합시다 (pthread를 사용하여 구현 됨). 인터리빙이없는 스레드 t1과 t2의 실행 시간은 50ms에서 100ms 사이입니다. 어쨌든 내가 30ms (즉, t3가 실행을 마친 후에 (sched_yeild()) 인터럽트를 발행 할 스레드 t3을 구현할 수 있습니까? 다음 실행은 그 시점 이후 30ms가 될 것이고 30ms 시간 초과가 발생하면 yield됩니다. 스레드가 실행 중이고 스레드가 완료 될 때까지 스레드 t3을 실행합니다. [sched_yeild()])? 다음은 내 코드의 구조입니다 : 당신은 (높은 우선 순위를 통해 예를 들어 것은 sched_setscheduler (0, SCHED_RR, ...을 T3 실행 할 수 있습니다멀티 스레드 프로그램 용 C++ 타이머 인터럽트
#include <pthread.h>
#include <sched.h>
//others header files
void* thread1(void *){
while(1){
//code for thread1 :loop time about 50ms-100ms
sched_yield();
}
}
void* thread2(void *){
while(1){
//code for thread2:loop time about 50ms-100ms
sched_yield();
}
}
void* thread3(void *){
while(1){
//code for thread3
sched_yield();
}
}
int main(){
pthread_t t1,t2,t3;
pthread_create(&t1,NULL,thread1,NULL);
pthread_create(&t2,NULL,thread2,NULL);
pthread_create(&t3,NULL,thread3,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
pthread_join(t3,NULL);
return 0;
}
T3가 (최대한 가깝게) T1과 T2를 즉시 선점하고 항복 할 때까지 실행하고 싶습니다. T3에 더 높은 우선 순위를 부여하려는 것 같습니다. 그러나 동기화를 위해 이것을 믿지 마십시오. – user4581301
"인터럽트"가 의미하는 것을 정의하십시오. 이 용어는이 문맥에서 많은 다른 의미를 가지고 있습니다. 게다가,'sched_yield()'는 실제로 어떤 일이 일어날 지 보장하지 않는다는 것을 이해합니다. XY 문제처럼 들립니다. 당신의 진정한 문제는 다른 것인데 당신은 해결책이이 질문이 묘사 한 것이라고 생각합니다. 어쩌면 당신이 진짜 문제를 기술한다면 누군가 당신을위한 진정한 해결책을 제시 할 수 있습니다. –
@ user4581301 예. 이 경우 현재 실행중인 스레드 (t1 및 t2)가 여전히 실행 중이며 리소스를 포기하지 않으므로 우선 순위가 작동해서는 안됩니다. – user9870