Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PSRCh_studentam / ПСРЧ Лаб робота 1.doc
Скачиваний:
44
Добавлен:
23.03.2015
Размер:
1.9 Mб
Скачать

Таблиця 2.

Функція

Опис

pthread_key_create ()

Створити ключ даних з функцією деструктора

pthread_key_delete ()

Знищити ключ даних

pthread_setspecific ()

Зв'язати значення даних із ключем даних

pthread_getspecific ()

Повернути значення даних, зв'язане з ключем даних

2.2. Життєвий цикл потоку

Кількість потоків у межах процесу може змінюватись протягом виконання програми. Це пов'язано з можливістю динамічно створювати і знищувати потоки. Створення потоку за допомогою виклику функції pthread_create() визначає розподіл і ініціалізацію необхідних для потоку ресурсів у межах адресного простору процесу і початок виконання потоку в певному адресному просторі. Завершення потоку за допомогою виклику функцій pthread_exit (), pthread_cancel () визначає зупинку потоку і звільнення ресурсів потоку.

На протязі часу свого існування потік може знаходитися в 3 основних станах: виконуватися (RUNNING), бути готовим до виконання (READY), бути блокованим. Причин, з яких потік може стати блокованим, є багато, і тому визначена певна кількість станів блокування з відповідними назвами (рис.2). Зазвичай після розблокування потік потрапляє до стану READY.

Рис.2. Стани потоку.

Зазначені назви станів означають наступне:

CONDVAR - потік блокований на умовній змінній (при виклику pthread_condvar_wait ()).

DEAD - потік закінчив виконання й очікує приєднання другого потоку, не звільняє ресурси.

INTERRUPT - потік блокований, очікує переривання (при виклику InterruptWait ()).

JOIN - потік блокований, очікує на приєднання до іншого потоку (при виклику pthread_join ()).

MUTEX - потік блокований на взаємно-виключному блокуванні (при виклику pthread_mutex_lock ()).

NANOSLEEP - потік не діє протягом короткого інтервалу часу (при виклику nanosleep ()).

NET_REPLY - потік очікує відповідь, що буде отримана через мережу (при виклику MsgReply * ()).

NET_SEND - потік очікує на імпульс або сигнал, що буде отриманий через мережу (при виклику MsgSendPulse (), MsgDeliverEvent (), чи SignalKill ()).

READY - потік очікує на виконання, у той час як процесор виконує інший поток такого ж або більш високого пріоритету.

RECEIVE - потік блокований, очікує повідомлення (при виклику MsgReceive ()).

REPLY - потік блокований, очікує відповідь на своє повідомлення (при виклику MsgSend () і сервер одержав повідомлення).

RUNNING - потік виконується процесором.

SEM - потік очікує на семафорі (при виклику SyncSemWait ()).

SEND - потік блокований на відправленні повідомлення (при виклику MsgSend (), але сервер не одержав повідомлення).

SIGSUSPEND - потік блокований, очікуючи сигнал (при виклику sigsuspend ()).

SIGWAITINFO - потік блокований, очікуючи сигнал (при виклику sigwaitinfo ()).

STACK - потік очікує віртуальний адресний простір, що буде розподілено для стека потоку (батько викликає ThreadCreate ()).

STOPPED - потік блокований, очікує сигнал продовження SIGCONT.

WAITCTX - потік очікує на неціле число, щоб стати доступним для використання.

WAITPAGE - потік очікує на фізичну пам'ять, що буде розподілена для віртуальної адресації.

WAITTHREAD - потік очікує на закінчення створення дочірнього потоку (при виклику ThreadCreate ()).

Соседние файлы в папке PSRCh_studentam