OpenSCADAWiki:
Roman Savochenko
/
C Short All
/
part2
/part19
...
Home
|
Index
|
Changes
|
Comments
|
Users
|
Registration
|
Login
:
Password:
====2.19 Потоки.==== **pthread_attr_init (POSIX) <pthread.h>** //int pthread_attr_init(pthread_attr_t *attr);// Инициализация атрибутов <attr> канала, стандартными значениями. **pthread_kill (POSIX) <pthread.h, signal.h>** //int pthread_kill(pthread_t thread, int signo);// Послать сигнал <signo> потоку <thread>. **pthread_attr_destroy (POSIX) <pthread.h>** //int pthread_attr_destroy(pthread_attr_t *attr);// Удаление из памяти атрибутов <attr> ранее инициализированных. **pthread_attr_setschedpolicy, pthread_attr_getschedpolicy (POSIX) <pthread.h>** //int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);// //int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);// Получить, установить тактику <policy> управления потоком в соответствии с <attr>. Тактика может быть: * **SCHED_OTHER** - регулярное, не РВ разделение; * **SCHED_RR** - РВ, (round-robin); * **SCHED_FIFO** - РВ, (first in first out). **pthread_attr_setschedparam, pthread_attr_getschedparam (POSIX) <pthread.h>** //int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);// //int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);// Установка/получение параметров(приоритета) <param> разделения времени для РВ тактик. **pthread_attr_setdetachstate, pthread_attr_getdetachstate (POSIX) <pthread.h>** //int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);// //int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);// Установка/получение статуса отсоединения потока. **pthread_create (POSIX) <pthread.h>** //int pthread_create(pthread_t * thread, pthread_attr_t *attr, void * (*start_routine)(void *), void * arg);// Создает новый поток <thread> с атрибутами <attr> и запускает в потоке функцию <start_routine> с аргументами <arg>. Созданная задача разделяет код и память с родителем; **pthread_detach (POSIX) <pthread.h>** //int pthread_detach(pthread_t th);// Делает указанный <th> поток в отсоединенное состояние. **pthread_equal (POSIX) <pthread.h>** //int pthread_equal(pthread_t thread1, pthread_t thread2);// Сравнивает два потока на эквивалентность. **pthread_exit (POSIX) <pthread.h>** //void pthread_exit(void *retval);// Прекращает выполнение вызвавшего функцию потока с кодом возврата в <retval> **pthread_join (POSIX) <pthread.h>.** //int pthread_join(pthread_t *th, void **thread_return);// Ожидает завершение потока <th>. После завершения код возврата помещается в <thread_return>. **pthread_self (POSIX) <pthread.h>** //pthread_t pthread_self(void);// Возвращает идентификатор текущего потока. **pthread_sigprocmask (POSIX) <signal.h, pthread.h>** //int pthread_sigprocmask(int how, const sigset_t *set, sigset_t *oldset);// Изменяет список блокированных в данный момент сигналов для текущего потока. =====2.19.1 Отмена потоков===== **pthread_cancel (POSIX) <pthread.h>** //int pthread_cancel(pthread_t thread);// Отмена указанного <thread> потока. **pthread_setcanceltype (POSIX) <pthread.h>** //int pthread_setcanceltype(int type, int *oldtype);// Установка типа отмены в <type> и сохранение текущего в <oldtype>. **pthread_testcancel (POSIX) <pthread.h>** //void pthread_testcancel(void);// Установка точки отмена. **pthread_setcancelstate (POSIX) <pthread.h>** //int pthread_setcancelstate(int state, int *oldstate);// Установка состояния отмены потока в <state> и сохранение текущего в <oldstate>. =====2.19.2 Глобальные данные потоков===== **pthread_key_create (POSIX) <pthread.h>** //int pthread_key_create(pthread_key_t *key, void (*destr_function)(void *));// Создание ключа <key>, новой глобальной переменной. Можно указать функцию очистки ключа <destr_function> при уничтожении потока. **pthread_key_delete (POSIX) <pthread.h>** //int pthread_key_delete(pthread_key_t key);// Удаление ключа <key>. **pthread_setspecific, pthread_getspecific (POSIX) <pthread.h>** //int pthread_setspecific(pthread_key_t key, const void *pointer);// //void *pthread_getspecific(pthread_key_t key);// Запись/чтение глобальных потоковых переменных по ключу <key>. =====2.19.3 Обычные потоковые семафоры===== **sem_init, sem_destroy (POSIX) <semaphore.h>** //int sem_init(sem_t *sem, int pshared, unsigned int value);// //int sem_destroy(sem_t * sem);// Инициализация/удаление семафора <sem>. <pshared> должен быть равен нулю. <value> - Стартовое значение семафора. **sem_getvalue (POSIX) <semaphore.h>** //int sem_getvalue(sem_t * sem, int * sval);// Получить текущее состояние <sval> семафора <sem>. **sem_post (POSIX) <semaphore.h>** //int sem_post(sem_t * sem);// Установка семафора (+1). **sem_wait (POSIX) <semaphore.h>** //int sem_wait(sem_t * sem);// Ожидает ненулевого значения семафора. При вызове функции значение семафора уменьшается на единицу. **sem_trywait (POSIX) <semaphore.h>** //int sem_trywait(sem_t * sem);// Неблокирующие ожидания ненулевого значения семафора. =====2.19.4 Исключающие семафоры===== **thread_mutex_init, pthread_mutex_destroy (POSIX) <pthread.h>** //int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr);// //int pthread_mutex_destroy(pthread_mutex_t *mutex);// Инициализация/удаление исключающего семафора <mutex> с атрибутами <mutexattr>. **int pthread_mutex_lock, pthread_mutex_unlock (POSIX) <pthread.h>** //int pthread_mutex_lock(pthread_mutex_t *mutex);// //int pthread_mutex_unlock(pthread_mutex_t *mutex);// Захват/освобождение исключающего семафора <mutex>. Если семафор занят поток блокируется до освобождения. **pthread_mutex_trylock (POSIX) <pthread.h>** //int pthread_mutex_trylock(pthread_mutex_t *mutex);// Попытка захвата исключающего семафора <mutex>. Если семафор занят возвращается BUSY. **pthread_mutexattr_init, pthread_mutexattr_destroy (POSIX) <pthread.h>** //int pthread_mutexattr_init(pthread_mutexattr_t *attr);// //int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);// Создание/удаление атрибутов для <attr> исключающего семафора. **pthread_mutexattr_setkind_np, pthread_mutexattr_getkind_np (POSIX) <pthread.h>** //int pthread_mutexattr_setkind_np(pthread_mutexattr_t *attr, int kind);// //int pthread_mutexattr_getkind_np(const pthread_mutexattr_t *attr, int *kind);// Установка/получение типа исключающего семафора <kind>. =====2.19.5 Сигнальные переменные===== **pthread_cond_init, pthread_cond_destroy (POSIX) <pthread.h>** //int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr);// //int pthread_cond_destroy(pthread_cond_t *cond);// сохранение/удалении сигнальной переменной <cond>. <cond_attr> должна быть NULL. **pthread_cond_signal, pthread_cond_broadcast (POSIX) <pthread.h>** //int pthread_cond_signal(pthread_cond_t *cond);// //int pthread_cond_broadcast(pthread_cond_t *cond);// Разблокирует один/все потоки ожидающие сигнальной переменной <cond>; **pthread_cond_wait (POSIX) <pthread.h>** //int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);// //int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime);// Блокирует текущий поток на базе исключающего семафора <mutex> до изменения сигнальной переменной <cond> с таймаутом <abstime>.
Please type the word you read in the image: