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

Предоставляет атомарные операции для переменных, которые используются несколькими потоками.
4 ответа

Использование InterlockedIncrement

Читая о функции InterlockedIncrement, я заметил, что передаваемая переменная должна быть выровнена по 32-битной границе. Обычно я видел код, который использует InterlockedIncrement так: class A { public: A(); void f(); private: volatile long m_count…
05 мар '09 в 17:09
4 ответа

Как я должен увеличить число для сценария с циклической нарезкой с наименьшим количеством конфликтов?

Если много тем звонят GetNextNumber одновременно со следующим кодом, GetNextNumber вернет на 1 больше раз, чем любые другие числа. private class RoundRobbinNumber { private int _maxNumbers = 10; private int _lastNumber; private RoundRobbinNumber(int…
05 апр '12 в 18:51
2 ответа

Функция InterlockedExchange

Я работаю со списком, который разделен между многими потоками. Я считаю, что для хорошей производительности в этом случае будет полезно использовать функцию InterlockedExchange для вставки данных в этот список, но у меня есть некоторые сомнения. Есл…
2 ответа

Считать актуальное значение из переменной Interlocked с единственной записью в переменную

Я хотел бы создать класс с двумя методами: void SetValue(T value) сохраняет значение, но позволяет хранить только одно значение (в противном случае создается исключение). T GetValue() извлекает значение (и выдает исключение, если значения еще нет). …
21 фев '13 в 14:44
1 ответ

InterlockedExchange против InterlockedExchangePointer

В чем разница между InterlockedExchange а также InterlockedExchangePointer? Являются if( 0 != InterlockedCompareExchange( ( void** ) &_myVariable , temp , 0 ) ) а также if( 0 != InterlockedCompareExchangePointer( ( void** ) &_myVariable , te…
12 дек '12 в 10:27
1 ответ

Внедрение сервера на C winapi

Я новичок в многопоточности и хочу разработать сервер это мой текущий код: typedef struct Session { HANDLE handlers[2]; //HANDLE h_Send; //main session handler HANDLE h_MainHandler; HANDLE sema_MessageQ; char* UserName; SOCKET Socket; PList MessageQ…
3 ответа

Может ли Interlocked.Exchange обмениваться двухбайтовыми [] массивами?

Я хочу поменять местами два байтовых массива без необходимости блокировки. т.е. я не хочу делать byte[] src; byte[] dest; lock(synchLock) { dest = src; } Это возможно с Interlocked.Exchange? Я вижу, что это работает для массивов int в документах. Сп…
06 май '11 в 23:56
1 ответ

В MSVC, почему InterlockedOr и InterlockedAnd генерируют цикл вместо простой заблокированной инструкции?

На MSVC для x64 (19.10.25019), InterlockedOr(&g, 1) генерирует эту кодовую последовательность: prefetchw BYTE PTR ?g@@3JC mov eax, DWORD PTR ?g@@3JC ; g npad 3 $LL3@f: mov ecx, eax or ecx, 1 lock cmpxchg DWORD PTR ?g@@3JC, ecx ; g jne SHORT $LL3…
7 ответов

Interlocked.CompareExchange действительно быстрее, чем простая блокировка?

Я наткнулся на ConcurrentDictionary реализация для.NET 3.5 (извините, я смог найти ссылку прямо сейчас), которая использует этот подход для блокировки: var current = Thread.CurrentThread.ManagedThreadId; while (Interlocked.CompareExchange(ref owner,…
1 ответ

InterlockedOr8 на gcc MinGW

У меня не было проблем с поставляемой версией MinGW, которая поставляется с CodeBlocks 12.11. Но сейчас я попытался скомпилировать SyncSys. Компиляция enet не была проблемой, но компиляция самого SyncSys с помощью gcc/MinGW приводит к ошибкам, что я…
05 янв '14 в 04:50
2 ответа

Поля, считываемые / записываемые несколькими потоками, блокируются и изменяются

Есть справедливая доля вопросов о Interlocked против volatile здесь на ТАК я понимаю и знаю понятия volatile (без переупорядочения, всегда чтение из памяти и т. д.), и я знаю, как Interlocked работает в том, что выполняет атомарную операцию. Но мой …
06 дек '11 в 11:58
2 ответа

Обнаружение неожиданного блокированного поведения?

Я пишу программу проверки веб-ссылок и сталкиваюсь с поведением Interlocked, которое не могу объяснить. Во-первых, вот сокращенная версия кода: public class LinkCheckProcessor { private long _remainingLinks; public event EventHandler<LinksChecked…
22 май '11 в 16:28
6 ответов

Является ли конструкция C# "lock" устаревшей с помощью Interlocked.CompareExchange<T>?

Резюме: Мне кажется, что: упаковка полей, представляющих логическое состояние, в один неизменный расходный объект обновление авторитетной ссылки объекта с помощью вызова Interlocked.CompareExchange&lt;T&gt; и обработка ошибок обновления соответствен…
15 сен '09 в 23:52
2 ответа

Parallel.For() с Interlocked.CompareExchange(): более низкая производительность и немного отличающиеся результаты от серийной версии

Я экспериментировал с вычислением среднего значения списка, используя Parallel.For(), Я отказался от этого, так как он примерно в четыре раза медленнее, чем простая серийная версия. И все же я заинтригован тем фактом, что он не дает того же результа…
30 мар '16 в 11:53
4 ответа

Таймер повторного входа в Windows Service

Я хочу создать службу Windows, которая должна выполнять разные методы в разное время. Дело совсем не в точности. Я использую system.timers.timer и регулирую различные методы, которые будут выполняться внутри Eventhandler-метода с помощью счетчиков. …
2 ответа

Значение "знак игнорируется" в документации _InterlockedCompareExchange

Документация для _InterlockedCompareExchange говорит по каждому параметру Знак игнорируется. Значит ли это, что числа как 0xffff а также 0x7fff (для 16-битной версии) будет считаться равным _InterlockedCompareExchange16 и т.д. по другим характеристи…
06 сен '17 в 11:05
1 ответ

Правильный способ синхронизации между методом и остановкой

У меня есть функция (давайте назовем ее функцией A), что от 0 до многих потоков может получить к ней доступ (в то же время нет общих ресурсов). В любой момент времени пользователь может использовать, чтобы остановить процесс. Функция останова должна…
23 окт '17 в 21:18
3 ответа

Как первый введенный поток может сигнализировать другим параллельным потокам о завершении того же метода?

Как первый введенный поток может сигнализировать другим параллельным потокам о завершении того же метода? У меня есть метод с именем скажем PollDPRAM(). Он должен совершить поездку по сети на некоторое медленное оборудование и обновить личные данные…
1 ответ

Почему Interlocked.Increment дает неверный результат в цикле Parallel.ForEach?

У меня есть задача по миграции, и мне нужно проверить целевые данные, когда они будут выполнены. Чтобы уведомить администратора об успехе / неудаче проверок, я использую счетчик для сравнения количества строк в таблице Foo в базе данных Database1 с …
0 ответов

Длинный против {0L}[0]

В одном из наших старых сервисов я нашел такой кусок кода (комментарии оригинальные): long[] tasksCounter = {0}; //boxing for long counters long[] errorsCounter = {0}; //boxing for long counters Далее в коде эти "массивы" используются с классом Inte…
10 янв '18 в 17:39