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>. Тактика может быть:


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>.


 
Files[Hide files/form]
There is no comment on this page. [Display comments/form]