Изменения

Перейти к: навигация, поиск

Очередь Майкла и Скотта

878 байт добавлено, 01:31, 2 октября 2018
Реализация push
=== Реализация <tex>push</tex> ===
'''def''' push(x: '''Int'''):
newTail = '''new''' Node(x, '''new''' AtomicReference<Node>(null))
'''while''' ('''true'''): <font color=green>//CAS-цикл</font>
tail = T.get()
if ('''CAS'''(tail.next, '''null''', newTail)):
<font color=green>
/*
Если получилось добавить ещё один элемент в хвост,
пробуем передвинуть T. Если не получилось передвинуть T,
значит, другой поток сделал это за нас, завершаем работу.
если получилось - то мы сами передвинули T, завершаем работу
*/
</font>
'''CAS'''(T, tail, newTail)
'''return'''
Анонимный участник

Навигация