Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB_3.doc
Скачиваний:
2
Добавлен:
28.08.2019
Размер:
77.31 Кб
Скачать

Текст програми

#include| <stdio|.h>

#include| <pthread|.h>

#include| <sys/neutrino.h>

pthread_t| thread_id1|;

pthread_t| thread_id2|;

void| * long_thread1|(void| *notused)

{

int| n;

for|(n=0|;n<5;n++)

{

printf|("Eto| pervii| potok|, TID| %d - N povtora| %d \n", thread_id1|, n );

sleep|(2);

}

}

void| * long_thread2|(void| *notused)

{

int| m;

for|(m=0|; m<5|; m++|)

{

printf|("Eto| vtoroi| potok|, TID| %d - N povtora| %d \n", thread_id2|, m );

sleep|(1);

}

}

int| main|(void|)

{

printf|("Prog| threads| PID| %d \n",getpid());

pthread_create|(&thread_id1|, NULL|, long_thread1|, NULL|);

pthread_create|(&thread_id2|, NULL|, long_thread2|, NULL|);

sleep|(40);

return|(1);

}

Послідовність дій

У програмі створюються і запускаються на виконання два потоки. Коли один потік припиняється, відразу починає|розпочинає| роботу іншій. Припинення|призупинення| реалізоване функцією sleep|(n), яка зупиняє процес на n секунд. На екрані можна спостерігати, як по черзі працюють два процеси.

Результати

# gcc| pthread|.c

# `pwd`a|.out

Prog| threads| PID| 852000

Etot| pervii| potok|, TID| 0 - N povtora| 0

Etot| vtoroi| potok|, TID| 0 - N povtora| 0

Etot| vtoroi| potok|, TID| 3 - N povtora| 1

Etot| pervii| potok|, TID| 2 - N povtora| 1

Etot| vtoroi| potok|, TID| 3 - N povtora| 2

Etot| vtoroi| potok|, TID| 3 - N povtora| 3

Etot| pervii| potok|, TID| 2 - N povtora| 2

Etot| vtoroi| potok|, TID| 3 - N povtora| 4

Etot| pervii| potok|, TID| 2 - N povtora| 3

Etot| pervii| potok|, TID| 2 - N povtora| 4

#

Завдання

  1. Написати програму, яка за допомогою дочірнього процесу підраховує кількість рядків у файлі.

  2. Написати програму, яка при завершенні 1-го процесу породжувала ще 2-ва таких же.

  3. Підрахунок кількості входжень вказаного символу у всіх файлах поточного каталога. Обробка файлу - в породженому процесі.

  4. Пошук вказаного рядка у вказаному файлі. Обробка одного рядка - в породженому процесі.

  5. Множення матриці на вектор. Обробка одного рядка матриці - в породженому процесі.

  6. Припинити на 1c батьківський процес. У дочірньому процесі за допомогою системного виклику system() виконати стандартну команду ps, перенаправивши вивід у файл номер 1. Услід за цим завершити дочірній процес. У батьківському процесі викликати ps і перенаправити у файл номер 2. Звільнити елемент таблиці процесів породженого процесу.

  7. Припинити на 1с батьківський процес. Виконати в дочірньому процесі один з системних викликів exec(), передавши йому як параметр стандартну програму ps. Аналогічно виконати виклик ps в батьківському процесі. Результати роботи команд ps в обох процесах перенаправити в один і той же файл.

  8. Визначити в програмі глобальну змінну var із значенням, рівним 1. Перевизначити стандартний вивід і батьківського, і дочірнього процесів в один і той же файл. До виконання розгалуження збільшити на 1 змінну var, причому вивести її значення, як до збільшення, так і після. У батьківському процесі збільшити значення змінної на 3, а в дочірньому на 5. Вивести значення змінної до збільшення і після нього усередині кожного з процесів. Результат пояснити.

  9. Припинити на 2с дочірній процес. У дочірньому процесі за допомогою системного виклику system() виконати стандартну команду ls, перенаправивши вивід у файл номер 2. Услід за цим завершити дочірній процес. У батьківському процесі викликати ls -l і перенаправити у файл номер 1. Звільнити елемент таблиці процесів породженого процесу.

  10. Програма породжує через кожних 2 секунди 5 нових процесів. Кожен з цих процесів виконується заданий час і зупиняється, повідомляючи про це батька. Програма-батько виводить на екран всі повідомлення про зміни в процесах.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]