帮我写一个linux下测试线程任务抢占时间的程序,创建两个线程,线程1优先级比线程2低
时间: 2023-11-28 20:03:40 浏览: 182
创建一个带三个子线程的程序,第一个线程启动10ms后
好的,下面是一个简单的程序,可以测试线程任务抢占时间:
```c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
void *thread1(void *arg) {
while (1) {
printf("Thread 1 is running\n");
usleep(500000);
}
}
void *thread2(void *arg) {
while (1) {
printf("Thread 2 is running\n");
usleep(500000);
}
}
int main() {
pthread_t t1, t2;
int ret;
// 创建线程1,优先级低于线程2
pthread_attr_t attr;
struct sched_param param;
pthread_attr_init(&attr);
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
param.sched_priority = 1;
pthread_attr_setschedparam(&attr, ¶m);
ret = pthread_create(&t1, &attr, thread1, NULL);
if (ret != 0) {
printf("Error creating thread 1\n");
exit(EXIT_FAILURE);
}
// 创建线程2,优先级高于线程1
pthread_attr_init(&attr);
pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
pthread_attr_setschedpolicy(&attr, SCHED_FIFO);
param.sched_priority = 2;
pthread_attr_setschedparam(&attr, ¶m);
ret = pthread_create(&t2, &attr, thread2, NULL);
if (ret != 0) {
printf("Error creating thread 2\n");
exit(EXIT_FAILURE);
}
// 等待线程结束
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}
```
这个程序创建了两个线程,线程1的优先级比线程2低。线程1和线程2都会不停地打印自己的运行信息,每次运行500毫秒,然后睡眠500毫秒。由于线程2的优先级高,它会在竞争CPU资源时更容易被调度到,因此你会看到线程2的输出比线程1的输出更频繁。
阅读全文