Описание тега 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
У меня есть сценарий использования, в котором я хочу получить условную переменную и выпустить ее через некоторый интервал времени (например, у меня есть очередь упорядоченных по времени событий, и я хочу заблокировать ее в течение указанной продолжи…
10 окт '12 в 21:23
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 должен получить эту блокировку, чтобы завершить свою зад…
29 окт '12 в 22:25
1
ответ
c - ядро - спин-блокировки против очередей
Я думаю, что, несмотря на всю доступную документацию, я не понимаю, почему нужно ждать спин-блокировки в контексте ядра. Почему нет определенной очереди с процессом, требующим блокировки с атомарным счетчиком / индексом, и, если preempt отключен, об…
12 мар '15 в 13:20
1
ответ
Решение проблемы Spinlock
В драйверах устройств Linux. Когда он вводит спин-блокировки, он дает следующий пример: Ваш драйвер выполняется и только что снял блокировку, которая контролирует доступ к его устройству. Пока блокировка удерживается, устройство выдает прерывание, к…
30 май '12 в 12:27
2
ответа
Почему отключение прерываний отключает вытеснение в ядре и как спин-блокировка отключает вытеснение
Я недавно читаю Linux Kernel Development, и у меня есть несколько вопросов, связанных с отключением вытеснения. В разделе "Контроль прерываний" главы 7 говорится: Кроме того, отключение прерываний также отключает вытеснение ядра. Я также прочитал из…
25 дек '13 в 06:32
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 Потоки вызвали функцию, после которой все будет продолжаться, то есть своего рода конструкция синхронизации. У меня есть следующи…
05 фев '14 в 19:01
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