Я тестирую ожидающую политику семафора Linux.Linux semaphore.h ожидающая/ожидающая политика quene
Linux страница руководство не сообщает ожидающие политик: http://linux.die.net/man/3/sem_wait,
Может быть, решено планировщиком. Это означает, что приоритетный поток, ожидающий этого семафора, может работать первым.
Поэтому я создаю 4 pthreads с приоритетом 10, 20, 30, 40 и устанавливаю политику планировщика в SCHED_FIFO.
Однако результат теста показывает, что ожидающая политика - это FIFO. Кто-нибудь знает, есть ли какой-либо документ или исходный код semaphore.h для ожидания информации о политике?
Благодаря
#include <string.h>
#include <pthread.h>
#include <semaphore.h>
#include "stdlib.h"
#include "stdio.h"
sem_t b_sem;
int test_routine(int my_num)
{
usleep(1+ my_num * 1000);
printf("I'm %d, going to wait sem\n", my_num);
sem_wait(&b_sem);
printf("I'm %d, I got the sem\n", my_num);
while(1)
{
sleep(1);
}
}
int main()
{
int i;
int pthrid[4] = {0,0,0,0};
pthread_attr_t attr[4];
struct sched_param prv_priority[4];
struct sched_param param;
param.sched_priority = sched_get_priority_max(SCHED_FIFO);
sched_setscheduler(0, SCHED_FIFO, ¶m);
sem_init(&b_sem, 1, 0);
for(i = 0 ; i < 4 ; i++)
{
pthread_attr_init(&attr[i]);
pthread_attr_getschedparam(&attr[i], &prv_priority[i]);
pthread_attr_setschedpolicy(&attr[i], SCHED_FIFO);
prv_priority[i].sched_priority = (10 + i*10);
printf("test start, thread %d has priority %d\n", i ,prv_priority[i].sched_priority);
pthread_attr_setschedparam(&attr[i], &prv_priority[i]);
pthread_create(&pthrid[i], &attr[i], test_routine, i);
}
sleep(1);
for(i = 0 ; i < 4 ; i++)
{
printf("give sem\n");
sem_post(&b_sem);
sleep(1);
}
sleep(100000);
}
результат:
test start, thread 0 has priority 10
test start, thread 1 has priority 20
test start, thread 2 has priority 30
test start, thread 3 has priority 40
I'm 0, going to wait sem
I'm 1, going to wait sem
I'm 2, going to wait sem
I'm 3, going to wait sem
give sem
I'm 0, I got the sem
give sem
I'm 1, I got the sem
give sem
I'm 2, I got the sem
give sem
I'm 3, I got the sem
Большое спасибо! Я получил исключенный результат после "pthread_attr_setinherchedched" – Wanga