Блокировка бесплатной очереди, любые проблемы с этимC#

Место общения программистов C#
Ответить
Anonymous
 Блокировка бесплатной очереди, любые проблемы с этим

Сообщение Anonymous »

QueryWorker — это класс, а QueryWorker.Next — это поле QueryWorker.
Это поставит Writer в очередь и поставит его последним в очереди.
Возвращает true, если вы первый в очереди.
Вы видите какие-либо проблемы с этим? Это только для постановки в очередь, всплывающая часть является единственным потребителем и поэтому не требует блокировки.
internal bool TryStartWriting(QueryWorker Writer)
{
QueryWorker? Last;

do
{
Last = WriterQueueHead;

while (Last is null)
{
if (Interlocked.CompareExchange(ref WriterQueueHead, Writer, null) is null)
return true;

Last = WriterQueueHead;
}

while (Last.Next is not null)
Last = Last.Next;

} while (Interlocked.CompareExchange(ref Last.Next, Writer, null) is not null);

WriterQueueHead = Writer;
return false;
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... -with-this
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»