Описание тега spinwait
Цикл "спин-ожидание" - это метод, используемый в многопоточных приложениях, при котором один поток ожидает других потоков для защиты критического участка, препятствий или других синхронизаций.
3
ответа
Вызов thread.sleep() в ожидании появления нового потока
Я полагаю, что этот вопрос можно свести к "SpinWait vs. Block?", Но я подумал, что может быть более интересный ответ, почему почти каждый учебник по C# продвижению предлагает следующий вызов: Thread newThread = new Thread(new ThreadStart(ThreadMetho…
16 июн '11 в 00:56
3
ответа
Есть ли в.Net Framework примеры использования спин-блокировки или спин-вайта?
Я посмотрел на одновременные коллекции, но они, кажется, используют нормальную блокировку под капотом. Есть ли какие-либо хорошие примеры в.Net Framework, которые используют эту конструкцию блокировки? Я изначально посмотрел на ConcurrentDictionary.…
28 июн '11 в 11:31
2
ответа
Энергосберегающий SpinWait
У меня есть цикл опроса в C#, который должен опрашивать в среднем каждые 100 микросекунд (учитывая, конечно, что из-за нехватки ядра избыточное переключение контекста потока не выполняется, ). Поскольку нет времени на перепланировку, Sleep(1) не под…
07 авг '12 в 00:37
1
ответ
Ползание ореха застревает в ожидании вращения или активном. как уменьшить цикл выборки?
Я использую Nutch 2.1 и сканирую сайт. Проблема заключается в том, что сканер продолжает показывать выборку спин-ожидания / активности URL-адреса, и так как выборка занимает столько времени, что время подключения к mysql истекает. Как я могу уменьши…
02 янв '13 в 05:27
1
ответ
SpinWait в обновлении без блокировки
Читая Потоки Албахари в C#, я заметил, что шаблон "Блокировка бесплатного обновления" использует SpinWait в конце цикла: static void LockFreeUpdate<T> (ref T field, Func <T, T> updateFunction) where T : class { var spinWait = new SpinWai…
13 июн '16 в 21:24
0
ответов
Зачем вам нужен SpinWait в образце LockFreeUpdate из "Потоки в C#" Албахари
Я работаю над малым Ref<T> абстракция с оптимистичным методом обновления без блокировок (предполагается работать с неизменяемым T структуры данных, в частности неизменные деревья). Он основан на "Threading в C#" Албахари LockFreeUpdate метод в…
18 мар '14 в 10:53
1
ответ
Что является эквивалентом SpinWait для Windows .NET (C++) в Linux и Mac OS X?
Windows .NET (C++) предоставляет SpinWait для ожидания многопоточности, дружественного гиперпоточности, с инструкциями YIELD/PAUSE. Какова эквивалентная функция в Linux и Mac OS X? Если системный вызов недоступен, как можно реализовать эквивалент в …
06 июл '15 в 12:03
1
ответ
Случайные числа в циклах
Привет, я искал во всем Интернете этот ответ, и, пожалуйста, позвольте мне объяснить, прежде чем я вхожу в реальную проблему это может показаться простым, но единственными вариантами, которые действительно помогли мне, были Thread.Sleep и Thread.Spi…
27 мар '15 в 06:37
1
ответ
Пытается заменить lock() на SpinWait.SpinUntil(), но это не работает
Давайте начнем с кода; checkedUnlock является HashSet<ulong> _hashsetLock это объект lock (_hashsetLock) newMap = checkedUnlock.Add(uniqueId); против fun в инт SpinWait.SpinUntil(() => Interlocked.CompareExchange(ref fun, 1, 0) == 1); newMa…
08 авг '18 в 15:59
3
ответа
Почему во внутреннем Hashtable.NET есть Thread.Sleep(1)?
Недавно я читал реализацию.NET Hashtable и столкнулся с фрагментом кода, который я не понимаю. Часть кода: int num3 = 0; int num4; do { num4 = this.version; bucket = bucketArray[index]; if (++num3 % 8 == 0) Thread.Sleep(1); } while (this.isWriterInP…
15 ноя '13 в 17:00
0
ответов
SpinWait - Почему и как это происходит?
Спасибо, что нашли время посмотреть на мой вопрос. Я работаю над мультимедийным приложением, основанным в основном на.NET 4.7, DXGI, DirectX 12 и RawInput. Подводя итог, можно сказать, что приложение начинает свою жизнь как NativeWindow без каких-ли…
30 ноя '18 в 19:51
2
ответа
Чем метод NET 4.0 SpinWait отличается от метода SpinWait() до версии 4.0?
MSDN "Многопоточные коллекции.NET Framework 4" заявляет: "Некоторые из одновременных типов коллекций используют легкие механизмы синхронизации, такие как SpinLock, SpinWait, SemaphoreSlim и CountdownEvent, которые являются новыми в.NET Framework 4" …
27 фев '13 в 11:22
1
ответ
Спин ждать C++11
У меня есть следующая структура struct info { unsigned long a; unsigned long b; }; atomic <info> data; используется потоком писателя и потоком читателя. Читатель должен как можно быстрее реагировать на новые значения. Для этого я реализовал в …
29 апр '19 в 19:36
0
ответов
C#: Spinwait в поле int (действующее как bool) против SpinLock?
В чем эти два различия? public class SpinWaitLocking { private int _isLock; public void TestMethod1() { var sw = new SpinWait(); while (Interlocked.CompareExchange(ref _isLock, 1, 0) == 0) { sw.SpinOnce(); } DoSomethingQuick1(); _isLock = 0; } publi…
13 ноя '19 в 06:22
0
ответов
Может ли Intel PCM считать конкретные инструкции? Пытаюсь измерить инструкции PAUSE удалено
Насколько я понимаю, при выполнении цикла спин-ожидания нужно выдавать инструкции PAUSE, чтобы намекнуть процессору на природу цикла. Во-первых, это не должно вызывать барьеров памяти после выхода из цикла, а во-вторых, это должно препятствовать кон…
14 май '20 в 00:49
2
ответа
Должны ли взаимосвязанные реализации на основе CompareExchange использовать SpinWait?
Ниже представлена реализация метода блокировки на основе Interlocked.CompareExchange. Целесообразно ли для этого кода использовать SpinWait вращать перед повторением? public static bool AddIfLessThan(ref int location, int value, int comparison) { …
04 ноя '19 в 18:06
2
ответа
SpinWait.Spin - пока не потребуется НАМНОГО больше времени, чем таймаут, для выхода в ожидании существования элемента селния
У меня есть относительно простой способ дождаться, пока элемент не появится и не отобразится. Метод обрабатывает ситуацию, когда для данного By возвращается более одного элемента (обычно мы ожидаем отображения только одного из них, но в любом случае…
10 ноя '20 в 08:04
1
ответ
Почему у AMD-CPU такой глупый PAUSE-тайминг
Я разработал объект-монитор, подобный объекту Java для C++, с некоторыми улучшениями. Основное улучшение состоит в том, что есть не только спин-цикл для блокировки и разблокировки, но и для ожидания события. В этом случае вам не нужно блокировать мь…
26 сен '21 в 07:19
0
ответов
Использование SpinWait при внешнем обновлении значения
У меня есть следующий код, который хорошо работает: while (mmf.ReadState() != MyAction.Confirmed) { Thread.Yield(); } Этот код ожидает, пока другой поток обновит байт в файле с отображением памяти. После другого потока (который выполняется из другог…
18 окт '21 в 11:25
0
ответов
Thread.SpinWait, похоже, зависит от основного потока
Я использую Thread.SpinWait в специальном потоке, чтобы создать почти точную задержку в 2 мс с минимальной вероятностью переключения контекста, что необходимо для точной синхронизации аппаратного обеспечения. Но с помощью профилировщика я заметил, ч…
20 июл '22 в 20:11