2010-05-02 4 views
0

После обсуждения, которое получило комментарии this question.Как написать спин-блокировку без использования CAS

Как можно было бы написать Spinlock без операций CAS?

В других штатах вопрос:

модель упорядочения памяти таким образом, что запись будет атомным (если два параллельных потоков написать ячейку памяти, в то же время, то результат будет один или другой). Платформа не будет поддерживать операции с атомарным сравнением и набором.

ответ

2

статьи Википедии на spinlock говорит, что вы должны будете использовать алгоритм, как Peterson's algortihm, который использует другой флаг, чтобы указать, какой процесс Превратим он должен войти в критическую секцию (если это необходимо).

+0

Похоже, для этого требуется одно объявление переменной в потоке? Вопрос был вдохновлен необходимыми тысячами нитей и неизвестным числом из них. Это означает, что это, вероятно, не является жизнеспособным решением :( – Martin

+0

Истина. Кроме того, потоки должны знать, какой атомно записываемый флаг принадлежит им, что по сути является тем, что пытается определить исходный вопрос. Существуют ли системы, которые не обеспечивают потоки с идентичностью, такие как комбинация идентичности того, что создало поток, и сериал от этого создателя? –

+0

Я собираюсь принять это, похоже, нет других способов сделать это. – Martin

Смежные вопросы