โดยโปรแกรมเริ่มต้นทำงานด้วย Time Sharing (นโยบาย TS) บน Linux วิธีรันโปรแกรมด้วยนโยบาย SCHED_RR บน Linux จากบรรทัดคำสั่ง?
ขอบคุณที่ให้ข้อมูลเกี่ยวกับคำสั่ง chrt (1) ฉันได้ใช้คำสั่งเพื่อเรียกใช้ Firefox ด้วยนโยบาย RR แต่ตามที่คุณเห็นด้านล่างเฉพาะเธรดหลักของ Firefox เท่านั้นที่ทำงานด้วยนโยบาย RR คุณสามารถบอกวิธีการใช้งานหัวข้ออื่น ๆ ทั้งหมดของ Firefox ด้วยนโยบาย RR ได้หรือไม่
$ ps -Lo pid,tid,class 2051
PID TID CLS
2051 2051 RR
2051 2055 TS
2051 2056 TS
2051 2057 TS
2051 2058 TS
2051 2059 TS
2051 2060 TS
2051 2061 TS
2051 2063 TS
2051 2067 TS
2051 2068 TS
2051 2069 TS
2051 2070 TS
2051 2072 TS
2051 2073 TS
2051 2074 TS
2051 2075 TS
2051 2077 TS
2051 2078 TS
2051 2080 TS
2051 2356 RR
2051 2386 TS
2051 2387 TS
แก้ไข: ฉันรันโปรแกรม pthreads ง่าย ๆ ดังต่อไปนี้และทดสอบเหมือนข้างต้น น่าเสียดายที่คำสั่ง chrt เปลี่ยนคลาสของเธรดหลักเท่านั้น โปรดดูที่ด้านล่าง.
$ ps -Lo pid,tid,class 3552
PID TID CLS
3552 3552 TS
3552 3553 TS
3552 3554 TS
3552 3555 TS
3552 3556 TS
3552 3557 TS
$ sudo chrt --rr -p 30 3552
...
$ ps -Lo pid,tid,class 3552
PID TID CLS
3552 3552 RR
3552 3553 TS
3552 3554 TS
3552 3555 TS
3552 3556 TS
3552 3557 TS
---- โปรแกรม----
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
long k = 1;
long a[10000];
int i = 1;
long b[10000];
for (k = 0; k < 400000000; k++) {
if (i == 9999) {
i = 1;
}
a[i] = ((k + i) * (k - i))/2;
a[i] = k/2;
b[i] = i * 20;
b[i] = a[i] - b[i];
i++;
int j = 0;
for (j = 0; j < i; j++) {
k = j - i;
}
}
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}