Последовательно-параллельный запуск нитей в операционной системе Linux

Автор работы: Пользователь скрыл имя, 17 Января 2012 в 21:30, лабораторная работа

Краткое описание

Реализовать последовательно-параллельный запуск нитей в операционной системе Linux (см. задание I) с использованием средств синхронизации. В графе выделяются три группы нитей. Часть нитей никак не синхронизирована. Часть синхронизирована мьютексом (захватывает мьютекс на время выполнения). Часть – семафорами (передает управление другой нити после каждой итерации).

Вложенные файлы: 1 файл

отчет_лб_2.doc

— 61.50 Кб (Скачать файл)

  pthread_t th_a, th_b, th_c, th_d, th_e, th_f, th_g, th_i,

        th_k, th_m, th_n;

  void * retval; // возвращаемое значение нити 

  // создать мьютекс

  retcode = pthread_mutex_init(

        &mt,  // дескриптор мьютекса

        NULL); //  атрибуты не используем 

  // создать семафоры

  retcode = sem_init(

        &sm_g, // дескриптор семафора

        0,  // могут использовать разные нити

        0); // начальное значение 0

  retcode = sem_init(&sm_b, 0, 0);

  retcode = sem_init(&sm_c, 0, 0);

  // семафор d начальное значение 1

  retcode = sem_init(&sm_d, 0, 1); 
 

    //retcode = pthread_create(&th_e, NULL, process1, (void *) "e"); 
 

  // создать нить а . Не синхронизирована

  retcode = pthread_create(

        &th_a, // дескриптор нити

        NULL,  // default attributes атрибуты не используем

        process1, // функции нити

        (void *)"a");  // параметр для ф-ции нити (имя нити)

  // ждем завершения нити а

  retcode = pthread_join(

        th_a, //  дескриптор нити

        &retval); // возвращаемое значение  нити 

  // создать нить g b c d. Синронизация семафорами

  retcode = pthread_create(&th_g, NULL, process3, (void *) "g");

  retcode = pthread_create(&th_b, NULL, process3, (void *) "b");

  retcode = pthread_create(&th_c, NULL, process3, (void *) "c");

  retcode = pthread_create(&th_d, NULL, process3, (void *) "d");

  // ждем завершения нити b

  retcode = pthread_join(th_b, &retval);

  // создать нить e.  Не синхронизирована

  retcode = pthread_create(&th_e, NULL, process1, (void *) "e");

  // ждем завершения нити e c

  retcode = pthread_join(th_e, &retval);

  retcode = pthread_join(th_c, &retval);

  // создать нить i f. Синхронизация мьютексом

  retcode = pthread_create(&th_i, NULL, process2, (void *) "i");

  retcode = pthread_create(&th_f, NULL, process2, (void *) "f");

  // ждем завершения нити f d

  retcode = pthread_join(th_f, &retval);

  retcode = pthread_join(th_d, &retval);

  // создать нить k m .  Синхронизация мьютексом

  retcode = pthread_create(&th_k, NULL, process2, (void *) "k");

  retcode = pthread_create(&th_m, NULL, process2, (void *) "m");

  // ждем завершения нити g i k

  retcode = pthread_join(th_g, &retval);

  retcode = pthread_join(th_i, &retval);

  retcode = pthread_join(th_k, &retval);

  // создать нить n Не синхронизирована

  retcode = pthread_create(&th_n, NULL, process1, (void *) "n");

  // ждем завершения нити n m

  retcode = pthread_join(th_n, &retval);

  retcode = pthread_join(th_m, &retval); 

  // убрать мьютекс

  retcode = pthread_mutex_destroy(&mt); 

  // убрать семафоры

  retcode = sem_destroy (&sm_g);

  retcode = sem_destroy (&sm_b);

  retcode = sem_destroy (&sm_c);  

  retcode = sem_destroy (&sm_d);    

  return 0;

}

// ------------------------------------------------------   
 
 
 

 

Выводы 

      В ходе выполнения лабораторной работы были изучены функции для работы с нитями, мьютексами и семафорами в операционной системе Linux, составлена и отлажена программа на языке Си. Нити запускаются согласно графу выполнения. Программа работает корректно. 
 
 
 
 
 
 
 
 
 

Информация о работе Последовательно-параллельный запуск нитей в операционной системе Linux