Использование взаимного исключения TestAndSet () инструкция

Только семантика.

HTTP PUT, как предполагается, принимает тело запроса, и затем хранит это в ресурсе, определенном URI.

HTTP POST является более общим. Это, как предполагается, инициирует действие с сервером. То действие могло быть должно сохранить тело запроса в ресурсе, определенном URI, или это мог быть различный URI, или это могло быть различное действие.

ПОМЕЩЕННЫЙ как загрузка файла. Помещенный в URI влияет точно на тот URI. POST к URI мог иметь любой эффект вообще.

16
задан 20 July 2009 в 08:10
поделиться

3 ответа

Функция TestAndSet, которую вы изначально указываете, выполняется только в том случае, если цель - ложь. Т.е. поток блокируется, пока цель не станет ложной. У меня нет этого учебника, но я уверен, что он упоминается где-то в тексте.

Обратите внимание, что TestAndSet - это "атомарная" функция, которая должна быть реализована на самых низких уровнях ОС (или даже набор команд ЦП). Если это реализовано в пользовательском приложении, может произойти переключение контекста между тестом и набором, что приведет к повреждению.

Уточнение: я уверен только в том, что функция выполняется, когда цель ложна, потому что где-то это должен быть операция сравнения, которая блокирует. Существует два типа TestAndSet - один, который возвращается только тогда, когда для цели установлено значение True (блокирование), и другой, который может возвращать False, т.е. возвратиться немедленно (это разрешит опрос другим потоком). Я предполагаю, что тот, который вы цитируете, является блокирующим, потому что кажется, что он возвращается сразу после запуска выполнения, что означает, что оператор «IF» выполняется механизмом более низкого уровня, например, процессором или ядром ОС.

3
ответ дан 30 November 2019 в 17:39
поделиться

Чтобы использовать метод testAndset, мы начинаем с переменной Lock, которая установлена в false:

HdwareData lock = new HdwareData(false);
1
ответ дан 30 November 2019 в 17:39
поделиться

Вот способ интуитивно подумать об атомарном TestAndSet.

Поток использует его перед входом в критическую область. Только два случая:

  1. Блокировка удерживается (* цель - ИСТИНА): вернуть ИСТИНА и * цель остается ИСТИНА
  2. Блокировка НЕ ​​удерживается: вернуть ЛОЖЬ, и * цель установлена ​​в ИСТИНА

Так что либо другое поток находится в критической области, поэтому * target (TRUE) отражает то, каким должно быть значение; или «Я» сейчас вхожу в эту критическую область, поэтому установите * target на TRUE.

17
ответ дан 30 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: