Описание тега spinlock

A spinlock is a lock which causes a thread trying to acquire it to simply wait in a loop ("spin") while repeatedly checking if the lock is available.
1 ответ

Переполнение секунд в pthread_cond_timedwait

У меня есть сценарий использования, в котором я хочу получить условную переменную и выпустить ее через некоторый интервал времени (например, у меня есть очередь упорядоченных по времени событий, и я хочу заблокировать ее в течение указанной продолжи…
1 ответ

Лучшее решение, чем спинлок

Сейчас я готовлюсь к экзамену и наткнулся на этот вопрос: При каких обстоятельствах спинлок является подходящей реализацией для блокировки? Когда это будет плохой выбор реализации? Опишите лучшее решение и напишите для него определение псевдокода. Я…
23 апр '14 в 15:56
9 ответов

Спинлоки, насколько они полезны?

Как часто вы на самом деле используете спин-блокировки в своем коде? Насколько часто встречается ситуация, когда использование занятого цикла фактически превосходит использование блокировок?Лично, когда я пишу какой-то код, который требует безопасно…
21 сен '09 в 18:59
1 ответ

Прерывание и спин-блокировка

Я понимаю что мы отключаем interrupts при приобретении spinlocks в обработчиках прерываний. У меня есть сомнения относительно того, что происходит, когда spinlock проводится в process context и в этот момент происходит прерывание? Может ли этот сцен…
26 ноя '14 в 14:18
1 ответ

Может ли SoftIRQ предотвращать запуск того же SoftIRQ с ядром Linux?

Я работаю над улучшением производительности драйвера и должен рассмотреть возможность тупика. В контексте SoftIRQ, spin_lock будет удерживаться и защищать некоторую переменную. В этом случае я должен использовать spin_lock или spin_lock_bh? spin_loc…
13 янв '17 в 22:44
1 ответ

Спинлок не работает для защиты критической секции в многоядерной системе

У меня есть драйвер символьного устройства, который вызывает системный тупик в многоядерной системе. Вызов записи имеет критическую секцию, защищенную спин-блокировкой (spin_lock_irqsave). ISR должен получить эту блокировку, чтобы завершить свою зад…
1 ответ

c - ядро ​​- спин-блокировки против очередей

Я думаю, что, несмотря на всю доступную документацию, я не понимаю, почему нужно ждать спин-блокировки в контексте ядра. Почему нет определенной очереди с процессом, требующим блокировки с атомарным счетчиком / индексом, и, если preempt отключен, об…
12 мар '15 в 13:20
1 ответ

Решение проблемы Spinlock

В драйверах устройств Linux. Когда он вводит спин-блокировки, он дает следующий пример: Ваш драйвер выполняется и только что снял блокировку, которая контролирует доступ к его устройству. Пока блокировка удерживается, устройство выдает прерывание, к…
30 май '12 в 12:27
2 ответа

Почему отключение прерываний отключает вытеснение в ядре и как спин-блокировка отключает вытеснение

Я недавно читаю Linux Kernel Development, и у меня есть несколько вопросов, связанных с отключением вытеснения. В разделе "Контроль прерываний" главы 7 говорится: Кроме того, отключение прерываний также отключает вытеснение ядра. Я также прочитал из…
1 ответ

Как реализована функция do_raw_spin_lock в linux

Пока отладочная проблема паники перешла в спинлок, я наткнулся на это определение спин блокировки в включают в себя / Linux/spinlock.h , Мне довольно трудно понять это определение. Почему __acquires(lock) используется после do_raw_spin_lock функцион…
03 май '13 в 08:38
0 ответов

Могут ли аппаратные прерывания выгрузить процесс, удерживающий спин-блокировку (выгрузка отключена)?

Есть похожий вопрос, заданный кем-то: Как ядро ​​обрабатывает блокировку в контексте процесса при возникновении прерывания? Но все еще неясно, когда прерывание приходит на одном процессоре, а процесс выполняется на том же процессоре с удерживаемой с…
29 окт '16 в 09:11
1 ответ

Являются ли спин-блокировки Linux/SMP излишне медленными?

Прочитав Understanding the Linux kernel (Bovet & Cesati), глава о синхронизации ядра утверждает, что код получения спин-блокировки сводится к следующему: 1: lock: btsl $0, slp jnc 3 2: testb $1, slp jne 2 jmp 1 3: Теперь я изначально думал, что …
19 янв '11 в 08:41
0 ответов

Ввод блокировки в блоке итератора

Мне любопытно узнать, является ли блок итератора хорошим местом для блокировки. У меня есть этот метод: protected SpinLock readLock; protected bool readLockTaken; protected SpinLock writeLock; protected bool writeLockTaken; public IEnumerator<T&g…
27 июл '18 в 14:48
1 ответ

Требуется ли для получения спин-блокировки сравнение-своп или достаточно свопа?

Предположим, у нас есть spinlock реализация: struct Lock { locked : Atomic(bool), } Тогда функция разблокировки может быть: fun unlock(lock : &Lock) { atomic_store(&lock.locked, false, release); } Но что насчет lock? Как правило, он использу…
13 ноя '18 в 12:09
0 ответов

Кто-нибудь может объяснить интересное поведение спин-блокировки?

Учитывая следующий код case class Score(value: BigInt, random: Long = randomLong) extends Comparable[Score] { override def compareTo(that: Score): Int = { if (this.value < that.value) -1 else if (this.value > that.value) 1 else if (this.random…
05 май '18 в 19:09
1 ответ

Назначение возвращаемого значения атомарной функции

Я пытаюсь реализовать функцию барьера, так что когда поток вызывает waitBarrier() это будет ждать, пока все остальные n Потоки вызвали функцию, после которой все будет продолжаться, то есть своего рода конструкция синхронизации. У меня есть следующи…
1 ответ

Не отключает ли raw_spin_lock в Linux прерывания hrtimer?

На одном процессоре в том же потоке сначала вызывается raw_spin_lock (), затем он запускает hrtimer и снова возвращается к raw_spin_lock (), где он будет вращаться там. В функции обработчика прерываний hrtimer будет вызвана raw_spin_unlock (). Это п…
08 окт '12 в 22:32
1 ответ

Синхронизация между процессом пользовательского пространства и контекстным кодом прерывания

Недавно я посетил пару интервью. Из всех вопросов ядра, которые были заданы, есть один конкретный вопрос, на который я не смог найти убедительного ответа. Как вы будете использовать различные методы синхронизации при совместном использовании данных …
16 окт '12 в 04:58
2 ответа

Как защитить данные, используемые несколькими обработчиками прерываний в ядре Linux?

Как я понимаю, если в обработчике прерываний есть какие-то данные, которые используются совместно с другим процессом, они должны быть защищены с помощью спин-блокировки, также нам необходимо отключить локальное прерывание. Но что, если данные распре…
09 апр '14 в 02:11
1 ответ

TAS против TTAS блокировки

Я сравниваю TAS с блокировкой TTAS. Вот код: ТАС: .globl _tas_lock_acquire _tas_lock_acquire: repeat: lock btsw $0, (%rdi) jc repeat ret .globl _tas_lock_release _tas_lock_release: lock btrw $0, (%rdi) ret TTAS: .globl _ttas_lock_acquire _ttas_lock_…
03 май '15 в 18:40