Описание тега 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 метод в…
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…
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) { …
2 ответа

SpinWait.Spin - пока не потребуется НАМНОГО больше времени, чем таймаут, для выхода в ожидании существования элемента селния

У меня есть относительно простой способ дождаться, пока элемент не появится и не отобразится. Метод обрабатывает ситуацию, когда для данного By возвращается более одного элемента (обычно мы ожидаем отображения только одного из них, но в любом случае…
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