The website "dmilvdv.narod.ru." is not registered with uCoz.
If you are absolutely sure your website must be here,
please contact our Support Team.
If you were searching for something on the Internet and ended up here, try again:

About uCoz web-service

Community

Legal information

Краткая справка

Краткая справка

Предыдущая  Содержание  Следующая V*D*V

Эта глава ввела большой набор символов для управления конкуренцией. Здесь приведены наиболее важные из них:

 

#include <asm/semaphore.h>

Подключает файл, который определяет семафоры и операции с ними.

DECLARE_MUTEX(name);

DECLARE_MUTEX_LOCKED(name);

Два макроса для объявления и инициализации семафора, используемого в режиме взаимного исключения.

void init_MUTEX(struct semaphore *sem);

void init_MUTEX_LOCKED(struct semaphore *sem);

Эти две функции могут быть использованы для инициализации семафора во время выполнения.

void down(struct semaphore *sem);

int down_interruptible(struct semaphore *sem);

int down_trylock(struct semaphore *sem);

void up(struct semaphore *sem);

Блокировка и разблокировка семафора. down в случае необходимости помещает вызывающий процесс в непрерываемый сон; down_interruptible, наоборот, может быть прервана сигналом. down_trylock не засыпает; вместо этого она сразу же возвращается, если семафор недоступен. Код, который блокирует семафор, в конечном итоге должен разблокировать его с помощью up.

struct rw_semaphore;

init_rwsem(struct rw_semaphore *sem);

Версии чтения/записи семафоров и функция инициализации.

void down_read(struct rw_semaphore *sem);

int down_read_trylock(struct rw_semaphore *sem);

void up_read(struct rw_semaphore *sem);

Функции для получения и освобождения доступа на чтение для семафора чтения/записи .

void down_write(struct rw_semaphore *sem);

int down_write_trylock(struct rw_semaphore *sem);

void up_write(struct rw_semaphore *sem);

void downgrade_write(struct rw_semaphore *sem);

Функции для управления доступом на запись для семафора чтения/записи .

 

#include <linux/completion.h>

DECLARE_COMPLETION(name);

init_completion(struct completion *c);

INIT_COMPLETION(struct completion c);

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

void wait_for_completion(struct completion *c);

Ожидает события завершения, чтобы просигнализировать.

void complete(struct completion *c);

void complete_all(struct completion *c);

Сигнал события завершения. complete будит, самое большее, один ожидающий поток, в то время как complete_all будит всех ожидающий.

void complete_and_exit(struct completion *c, long retval);

Сигнализирует о событии завершения, делая вызов completion и вызов exit для текущего потока.

 

#include <linux/spinlock.h>

spinlock_t lock = SPIN_LOCK_UNLOCKED;

spin_lock_init(spinlock_t *lock);

Подключает файл, определяющий интерфейс спин-блокировки и два способа инициализации блокировок.

void spin_lock(spinlock_t *lock);

void spin_lock_irqsave(spinlock_t *lock, unsigned long flags);

void spin_lock_irq(spinlock_t *lock);

void spin_lock_bh(spinlock_t *lock);

Различные способы блокирования спин-блокировки и, возможно, запрета прерываний.

int spin_trylock(spinlock_t *lock);

int spin_trylock_bh(spinlock_t *lock);

Незацикливающиеся версии указанных выше функций; возвращают 0 в случае неудачи при получении блокировки, ненулевое иначе.

void spin_unlock(spinlock_t *lock);

void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags);

void spin_unlock_irq(spinlock_t *lock);

void spin_unlock_bh(spinlock_t *lock);

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

rwlock_t lock = RW_LOCK_UNLOCKED

rwlock_init(rwlock_t *lock);

Это два способа инициализации блокировок чтения/записи .

void read_lock(rwlock_t *lock);

void read_lock_irqsave(rwlock_t *lock, unsigned long flags);

void read_lock_irq(rwlock_t *lock);

void read_lock_bh(rwlock_t *lock);

Функции для получения доступа на чтение для блокировки чтения/записи.

void read_unlock(rwlock_t *lock);

void read_unlock_irqrestore(rwlock_t *lock, unsigned long flags);

void read_unlock_irq(rwlock_t *lock);

void read_unlock_bh(rwlock_t *lock);

Функции для освобождения доступа на чтения для спин-блокировки чтения/записи .

void write_lock(rwlock_t *lock);

void write_lock_irqsave(rwlock_t *lock, unsigned long flags);

void write_lock_irq(rwlock_t *lock);

void write_lock_bh(rwlock_t *lock);

Функции для получения доступа на запись для блокировки чтения/записи.

void write_unlock(rwlock_t *lock);

void write_unlock_irqrestore(rwlock_t *lock, unsigned long flags);

void write_unlock_irq(rwlock_t *lock);

void write_unlock_bh(rwlock_t *lock);

Функции для освобождения доступа на запись для спин-блокировки чтения/записи .

 

#include <asm/atomic.h>

atomic_t v = ATOMIC_INIT(value);

void atomic_set(atomic_t *v, int i);

int atomic_read(atomic_t *v);

void atomic_add(int i, atomic_t *v);

void atomic_sub(int i, atomic_t *v);

void atomic_inc(atomic_t *v);

void atomic_dec(atomic_t *v);

int atomic_inc_and_test(atomic_t *v);

int atomic_dec_and_test(atomic_t *v);

int atomic_sub_and_test(int i, atomic_t *v);

int atomic_add_negative(int i, atomic_t *v);

int atomic_add_return(int i, atomic_t *v);

int atomic_sub_return(int i, atomic_t *v);

int atomic_inc_return(atomic_t *v);

int atomic_dec_return(atomic_t *v);

Целочисленные переменные с атомарным доступом. Переменные atomic_t должны быть доступны только через эти функции.

 

#include <asm/bitops.h>

void set_bit(nr, void *addr);

void clear_bit(nr, void *addr);

void change_bit(nr, void *addr);

test_bit(nr, void *addr);

int test_and_set_bit(nr, void *addr);

int test_and_clear_bit(nr, void *addr);

int test_and_change_bit(nr, void *addr);

Атомарный доступ к битовым величинам; они могут быть использованы для флагов или переменных блокировки. Использование этих функций позволяет избежать состояния гонок, связанного с одновременным доступом к битам.

 

#include <linux/seqlock.h>

seqlock_t lock = SEQLOCK_UNLOCKED;

seqlock_init(seqlock_t *lock);

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

unsigned int read_seqbegin(seqlock_t *lock);

unsigned int read_seqbegin_irqsave(seqlock_t *lock, unsigned long flags);

int read_seqretry(seqlock_t *lock, unsigned int seq);

int read_seqretry_irqrestore(seqlock_t *lock, unsigned int seq, unsigned long flags);

Функции для получения доступа на чтение к ресурсам, защищённым последовательной блокировкой.

void write_seqlock(seqlock_t *lock);

void write_seqlock_irqsave(seqlock_t *lock, unsigned long flags);

void write_seqlock_irq(seqlock_t *lock);

void write_seqlock_bh(seqlock_t *lock);

int write_tryseqlock(seqlock_t *lock);

Функции для получения доступа на запись к ресурсу, защищённому последовательной блокировкой.

void write_sequnlock(seqlock_t *lock);

void write_sequnlock_irqrestore(seqlock_t *lock, unsigned long flags);

void write_sequnlock_irq(seqlock_t *lock);

void write_sequnlock_bh(seqlock_t *lock);

Функции для освобождения доступа на запись к ресурсу, защищённому последовательной блокировкой.

 

#include <linux/rcupdate.h>

Подключает файл, необходимый для использования механизма чтения-копирования-обновления (RCU) .

void rcu_read_lock;

void rcu_read_unlock;

Макросы для получения атомарного доступа на чтение к ресурсу, защищённому RCU.

void call_rcu(struct rcu_head *head, void (*func)(void *arg), void *arg);

Организует обратный вызов для запуска безопасного освобождения защищённого RCU ресурса после того, как все процессоры получили от планировщика задач время для работы.

 

Предыдущая  Содержание  Следующая