Создание и выполнение потоков в ОС Linux

Страницы работы

Содержание работы

Министерство Образования Российской Федерации

Хабаровский Государственный Технический Университет

                                                                                                            Кафедра «ВТ»

Лабораторная работа №4

Создание и выполнение потоков.

Выполнили студенты гр. ВМ-11  

Рудмин В.Н.

Лагвиненко В.

Проверил  преподаватель

Соркин Н.Ю.

Хабаровск 2004

Цель работы: изучение создания, контроля и завершения потоков в ОС Linux. Знакомство с          функциями ОС Linux, относящимся к работе с потоками.

1. Листингпрограммы.

#include <pthread.h> #include <stdio.h> struct ciclecount { int count; }; int ccn=1; void* ccld_thd(void *t) { int i; printf("\ni'am child_child thread N%d with PID_%dPPID_%d\n",ccn,getpid(),getppid( )); for (i=1;i<=10;i++) { printf("%d\n",i); sleep(1); } ccn++; return 0; } void* cld_thd(void *parameters) { struct ciclecount* n=(struct ciclecount*) parameters; int i; pthread_t ccthd_id; printf("\ni'am child thread with PID_%d PPID_%d\n",getpid(),getppid()); sleep(2); for (i=1;i<=n->count;i++) { pthread_create(&ccthd_id,NULL,ccld_thd,NULL); pthread_join(ccthd_id,NULL); } printf("\nthe END of child thread \n"); sleep(2); return 0; } main() { struct ciclecount cthd_count; pthread_t cthd_id; cthd_count.count=2; printf("\nI'am main thread with PID_%d\n",getpid()); sleep(1); pthread_create(&cthd_id,NULL,cld_thd,&cthd_count); pthread_join(cthd_id,NULL); printf("\nThe END of main thread \n"); return 0; } Результат работы программы. I'am main thread with PID_2045 i'am child thread with PID_2047 PPID_2046 i'am child_child thread N1 with PID_2048 PPID_2046 1 2 3 4 5 6 7 8 9 10 i'am child_child thread N2 with PID_2052 PPID_2046 1 2 3 4 5 6 7 8 9 10 the END of child thread The END of main thread

2. Ответ на вопрос 1.

При запуске программы несколько раз различные результаты её работы получаются из-за того, что невозможно определить, когда система предоставит доступ к процессору одному потоку, а когда – другому.

Длительность этого доступа может быть как достаточно большой, так и очень короткой, в зависимости от того, как часто система переключает задания.

3. Следующие атрибуты потоков поддерживаются.

Detachstate

Контролирует состояние созданного процесса:

PTHREAD_CREATE_JOINABLE – joinable состояние

PTHREAD_CREATE_DETACHED – detached состояние

По умолчанию: PTHREAD_CREATE_JOINABLE

В joinable состоянии, другие потоки могут синхронизироваться на завершении потока и возвращать его код завершения, используя функцию pthread_join().

Некоторые из ресурсов потока остаются размещёнными после завершения потока, положение исправляется только тогда, когда другой поток вызовет функцию

pthread_join(). (на этот процесс.)

В состоянии detached, ресурсы потока немедленно освобождаются, когда он завершается, но функция pthread_join() не может быть использована для синхронизации на завершении процесса.

Процесс созданный в joinable состоянии позже может быть переведен в detached состояние используя функцию pthread_detach.

Schedpolicy

Выбор политики планирования для потока:

SCHED_OTHER-постоянное планирование, не в реальном масштабе времени.

SCHED_RR-коллективное, в реальном масштабе времени.

SCHED_FIFO- в реальном масштабе времени, first-in first-out.

по умолчанию: SCHED_OTER.

Полтика планирования в реальном масштабе времени SCHED_RR и SCHED_FIFO доступна только  процессам с суперпользовательскими привилегиями.

Политика планирования потока может быть изменена после его создания с помощью функции pthread_setschedparam().

Schedparam

Содержит параметры планирования (по существу, приоритет планирования)

для потока.

По умолчанию: приоритет – 0.

Этот атрибут – не существенен, если политика планирования SCHED_OTER.

Он имеет значение только для real-time политики SCHED_RR и SCHED_FIFO.

Приоритет планирования потока может быть изменён после его создания с помощью функции pthread_setschedparam().

Inheritsched

Указывает каким образом политика планирования и приоритет планирования      передаются недавно созданному потоку. Определяются атрибутами политики планирования и приоритетом планирования, значение PTHREAD_EXPLICIT_SCHED

или наследуются от родительского потока, значение PTHREAD_           INHERIT_SCHED.

Scope

Определят возможности утверждения планирования для созданного потока.

В реализации LinuxThreads поддерживаются следующие значения:

PTHREAD_SCOPE_SYSTEM - означает, что потоки борются за процессорное время со всеми процессами запущенными на компьютере.

В частности приоритеты потоков интерпретируются относительно приоритетов всех других процессов работающих в системе.

PTHREAD_SCOPE_PROCESS – означает, что планирование производится между потоками в рамках одного процесса.

Приоритеты потоков интерпретируются относительно приоритетов всех других потоков в данном процессе, независимо от приоритетов других процессов.   

PTHREAD_SCOPE_PROCESS is not supported in LinuxThreads.

По умолчанию: PTHREAD_SCOPE_SYSTEM.

Вывод:OS Linux предоставляет широкие возможности по созданию, управлению и контролю         

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

потоками.

Похожие материалы

Информация о работе

Тип:
Отчеты по лабораторным работам
Размер файла:
40 Kb
Скачали:
0