Операции со спинлоком

We use cookies. Read the Privacy and Cookie Policy

Операции со спинлоком

Инициализация и разрушение спинлока

int pthread_spin_init(pthread_spinlock_t* spinner, int pshared);

Функция инициализирует объект синхронизации спинлока блокировки, на который указывает аргумент spinner, и устанавливает для него параметр доступа из других процессов в соответствии со значением переменной pshared. Эта переменная может принимать следующие значения:

• PTHREAD_PROCESS_SHARED — с объектом спинлок может оперировать поток любого процесса, имеющего доступ к памяти, в которой распределен объект спинлок;

• PTHREAD_PROCESS_PRIVATE — доступ к объекту синхронизации возможен только для потоков процесса, из адресного пространства которого была распределена память объекта синхронизации.

В случае успешного завершения функция возвращает нулевое значение, в противном случае — один из следующих кодов ошибок:

AGAIN — системе не хватает ресурсов для инициализации блокировки;

EBUSY — объект крутящейся блокировки, на который указывает spinner, уже инициирован;

EINVAL — некорректный объект spinner;

ENOMEM — система не имеет достаточного количества свободной памяти для создания нового объекта.

int pthread_spin_destroy(pthread_spinlock_t* spinner);

Функция деинициализирует объект крутящейся блокировки. После деинициализации для последующего применения объекта он должен быть вновь инициализирован. Обратите внимание, результат функции не определен, если поток в данный момент крутится на блокировке, на которую указывает spinner, либо если объект spinner не был инициализирован.

Возвращаемые значения:

EOK — успешное выполнение;

EBUSY — блокировка используется другим потоком и не может быть разрушена;

EINVAL — некорректный объект spinner.

Данный текст является ознакомительным фрагментом.