Почему pthread_Join не работает при использовании планировщика RR или FIFO LINUX UBUNTU - PullRequest
0 голосов
/ 26 января 2020

Итак, я изменил пример кода IBM для pthread_attr_setdetachstate, чтобы лучше понять, как его использовать, я заметил, что если я установлю политику потоков на SCHED_RR или SCHED_FIFO, то основная функция не будет ждать окончания потока sh и просто завершает работу.

однако, если я задаю политику SCHED_OTHER, он ждет, пока поток завершится sh.

, почему это происходит?

/* CELEBP11 */
#define _OPEN_THREADS
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
#include <semaphore.h>
#include <sys/time.h>

void **stat;
void *thread1(void *arg)
{
   printf("hello from the thread\n");
   pthread_exit((void *)0);
}

int main()
{
   int            ds, rc;
   size_t         s1;
   pthread_attr_t attr;
   pthread_t      thid;

   rc = pthread_attr_init(&attr);
   if (rc == -1) {
      perror("error in pthread_attr_init");
      exit(1);
   }
   rc = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
   if (rc == -1) {
      perror("error in pthread_attr_setdetachstate");
      exit(2);
   }

   rc = pthread_attr_setinheritsched(&attr,PTHREAD_EXPLICIT_SCHED);
   if (rc == -1) {
      perror("error in pthread_attr_setdetachstate");
      exit(4);
   }


   rc = pthread_attr_setschedpolicy (&attr, SCHED_RR);
   if (rc != 0) {
      perror("error in pthread_attr_setschedpolicy");
      exit(5);
   }

   struct sched_param param_test;

   param_test.sched_priority = 50;

   rc = pthread_attr_setschedparam(&attr, &param_test);
   if (rc == -1) {
      perror("error in pthread_attr_setschedparam");
      exit(6);
   }

   rc = pthread_create(&thid, &attr, thread1, NULL);
   if (rc == -1) {
      perror("error in pthread_create");
      exit(3);
   }


   rc = pthread_join(thid, stat);
   exit(0);
}

для компиляции

gcc test.c -lpthread -lrt   -o test2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...