Обзор
Чтобы обновить значения, общие для нескольких потоков, используйте функции ниже. Они гарантируют атомарное обновление значений, т. е. чтение, обновление и запись в память выполняются в правильном порядке.
Эти функции медленнее, чем их неатомарные эквиваленты, поэтому используйте их только тогда, когда необходима синхронизация.
Обратите внимание, что в RenderScript ваш код, скорее всего, будет выполняться в отдельных потоках, даже если вы не создавали их явно. Среда выполнения RenderScript очень часто разделяет выполнение одного ядра на несколько потоков. Обновление глобальных переменных должно выполняться с помощью атомарных функций. Если возможно, измените свой алгоритм, чтобы вообще избежать их.
Краткое содержание
Функции
rsAtomicAdd : Потокобезопасное дополнение.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для добавления. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет значение к значению по адресу addr, т.е. *addr += value .
rsAtomicAnd : Поточно-безопасный побитовый и
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Ценность для и с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовую обработку двух значений, сохраняя результат обратно по адресу addr, т.е. *addr &= value .
rsAtomicCas : Потокобезопасное сравнение и установка
Параметры
| адрес | Адрес значения для сравнения и замены, если тест пройден. |
|---|
| сравнениезначение | Значение для проверки *addr. |
|---|
| новое значение | Значение для записи, если тест пройден. |
|---|
Возврат
| Значение *addr перед операцией. |
Если значение в адресе соответствует значению сравнения, то новоеЗначение записывается в адрес, т.е. if (*addr == compareValue) { *addr = newValue; } .
Вы можете проверить, что значение было записано, проверив, что значение, возвращаемое rsAtomicCas(), равно значению CompareValue.
rsAtomicDec : Потокобезопасное уменьшение
Параметры
| адрес | Адрес значения, которое нужно уменьшить. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает единицу из значения по адресу addr. Это эквивалентно rsAtomicSub (addr, 1) .
rsAtomicInc : Потокобезопасное приращение
Параметры
| адрес | Адрес значения для увеличения. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет единицу к значению по адресу addr. Это эквивалентно rsAtomicAdd (addr, 1) .
rsAtomicMax : максимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение в addr равным максимальному значению *addr и value, т.е. *addr = max(*addr, value) .
rsAtomicMin : минимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение addr равным минимуму *addr и value, т.е. *addr = min(*addr, value) .
rsAtomicOr : Поточно-ориентированный побитовый или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение до или с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполнять поразрядное или два значения, сохраняя результат по адресу addr, т.е. *addr |= value .
rsAtomicSub : Потокобезопасное вычитание
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для вычета. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает значение из значения по адресу addr, т.е. *addr -= value .
rsAtomicXor : Поточно-ориентированное поразрядное исключающее или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение для xor. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовое исключающее ИЛИ двух значений, сохраняя результат по адресу addr, т.е. *addr ^= value .
,
Обзор
Чтобы обновить значения, общие для нескольких потоков, используйте функции ниже. Они гарантируют атомарное обновление значений, т. е. чтение, обновление и запись в память выполняются в правильном порядке.
Эти функции медленнее, чем их неатомарные эквиваленты, поэтому используйте их только тогда, когда необходима синхронизация.
Обратите внимание, что в RenderScript ваш код, скорее всего, будет выполняться в отдельных потоках, даже если вы не создавали их явно. Среда выполнения RenderScript очень часто разделяет выполнение одного ядра на несколько потоков. Обновление глобальных переменных должно выполняться с помощью атомарных функций. Если возможно, измените свой алгоритм, чтобы вообще избежать их.
Краткое содержание
Функции
rsAtomicAdd : Потокобезопасное дополнение.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для добавления. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет значение к значению по адресу addr, т.е. *addr += value .
rsAtomicAnd : Поточно-безопасный побитовый и
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Ценность для и с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовую обработку двух значений, сохраняя результат обратно по адресу addr, т.е. *addr &= value .
rsAtomicCas : Потокобезопасное сравнение и установка
Параметры
| адрес | Адрес значения для сравнения и замены, если тест пройден. |
|---|
| сравнениезначение | Значение для проверки *addr. |
|---|
| новое значение | Значение для записи, если тест пройден. |
|---|
Возврат
| Значение *addr перед операцией. |
Если значение в адресе соответствует значению сравнения, то новоеЗначение записывается в адрес, т.е. if (*addr == compareValue) { *addr = newValue; } .
Вы можете проверить, что значение было записано, проверив, что значение, возвращаемое rsAtomicCas(), равно значению CompareValue.
rsAtomicDec : Потокобезопасное уменьшение
Параметры
| адрес | Адрес значения, которое нужно уменьшить. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает единицу из значения по адресу addr. Это эквивалентно rsAtomicSub (addr, 1) .
rsAtomicInc : Потокобезопасное приращение
Параметры
| адрес | Адрес значения для увеличения. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет единицу к значению по адресу addr. Это эквивалентно rsAtomicAdd (addr, 1) .
rsAtomicMax : максимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение в addr равным максимальному значению *addr и value, т.е. *addr = max(*addr, value) .
rsAtomicMin : минимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение addr равным минимуму *addr и value, т.е. *addr = min(*addr, value) .
rsAtomicOr : Поточно-ориентированный побитовый или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение до или с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполнять поразрядное или два значения, сохраняя результат по адресу addr, т.е. *addr |= value .
rsAtomicSub : Потокобезопасное вычитание
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для вычета. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает значение из значения по адресу addr, т.е. *addr -= value .
rsAtomicXor : Поточно-ориентированное поразрядное исключающее или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение для xor. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовое исключающее ИЛИ двух значений, сохраняя результат по адресу addr, т.е. *addr ^= value .
,
Обзор
Чтобы обновить значения, общие для нескольких потоков, используйте функции ниже. Они гарантируют, что значения обновляются атомарно, т.е. чтение, обновление и запись в память выполняются в правильном порядке.
Эти функции медленнее, чем их неатомарные эквиваленты, поэтому используйте их только тогда, когда необходима синхронизация.
Обратите внимание, что в RenderScript ваш код, скорее всего, будет выполняться в отдельных потоках, даже если вы не создавали их явно. Среда выполнения RenderScript очень часто разделяет выполнение одного ядра на несколько потоков. Обновление глобальных переменных должно выполняться с помощью атомарных функций. Если возможно, измените свой алгоритм, чтобы вообще избежать их.
Краткое содержание
Функции
rsAtomicAdd : Потокобезопасное дополнение.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для добавления. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет значение к значению по адресу addr, т.е. *addr += value .
rsAtomicAnd : Поточно-безопасный побитовый и
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Ценность для и с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовую обработку двух значений, сохраняя результат обратно по адресу addr, т.е. *addr &= value .
rsAtomicCas : Потокобезопасное сравнение и установка
Параметры
| адрес | Адрес значения для сравнения и замены, если тест пройден. |
|---|
| сравнениезначение | Значение для проверки *addr. |
|---|
| новое значение | Значение для записи, если тест пройден. |
|---|
Возврат
| Значение *addr перед операцией. |
Если значение в адресе соответствует значению CompareValue, то новоеЗначение записывается в адрес, т.е. if (*addr == compareValue) { *addr = newValue; } .
Вы можете проверить, что значение было записано, проверив, что значение, возвращаемое rsAtomicCas(), равно значению CompareValue.
rsAtomicDec : Потокобезопасное уменьшение
Параметры
| адрес | Адрес значения, которое нужно уменьшить. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает единицу из значения по адресу addr. Это эквивалентно rsAtomicSub (addr, 1) .
rsAtomicInc : Потокобезопасное приращение
Параметры
| адрес | Адрес значения для увеличения. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет единицу к значению по адресу addr. Это эквивалентно rsAtomicAdd (addr, 1) .
rsAtomicMax : максимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение в addr равным максимальному значению *addr и value, т.е. *addr = max(*addr, value) .
rsAtomicMin : минимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение addr равным минимуму *addr и value, т.е. *addr = min(*addr, value) .
rsAtomicOr : Поточно-ориентированный побитовый или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение до или с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполнять поразрядное или два значения, сохраняя результат по адресу addr, т.е. *addr |= value .
rsAtomicSub : Потокобезопасное вычитание
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для вычета. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает значение из значения по адресу addr, т.е. *addr -= value .
rsAtomicXor : Поточно-ориентированное поразрядное исключающее или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение для xor. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовое исключающее ИЛИ двух значений, сохраняя результат по адресу addr, т.е. *addr ^= value .
,
Обзор
Чтобы обновить значения, общие для нескольких потоков, используйте функции ниже. Они гарантируют атомарное обновление значений, т. е. чтение, обновление и запись в память выполняются в правильном порядке.
Эти функции медленнее, чем их неатомарные эквиваленты, поэтому используйте их только тогда, когда необходима синхронизация.
Обратите внимание, что в RenderScript ваш код, скорее всего, будет выполняться в отдельных потоках, даже если вы не создавали их явно. Среда выполнения RenderScript очень часто разделяет выполнение одного ядра на несколько потоков. Обновление глобальных переменных должно выполняться с помощью атомарных функций. Если возможно, измените свой алгоритм, чтобы вообще избежать их.
Краткое содержание
Функции
rsAtomicAdd : Потокобезопасное дополнение.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для добавления. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет значение к значению по адресу addr, т.е. *addr += value .
rsAtomicAnd : Поточно-безопасный побитовый и
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Ценность для и с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовую обработку двух значений, сохраняя результат обратно по адресу addr, т.е. *addr &= value .
rsAtomicCas : Потокобезопасное сравнение и установка
Параметры
| адрес | Адрес значения для сравнения и замены, если тест пройден. |
|---|
| сравнениезначение | Значение для проверки *addr. |
|---|
| новое значение | Значение для записи, если тест пройден. |
|---|
Возврат
| Значение *addr перед операцией. |
Если значение в адресе соответствует значению CompareValue, то новоеЗначение записывается в адрес, т.е. if (*addr == compareValue) { *addr = newValue; } .
Вы можете проверить, что значение было записано, проверив, что значение, возвращаемое rsAtomicCas(), равно значению CompareValue.
rsAtomicDec : Потокобезопасное уменьшение
Параметры
| адрес | Адрес значения, которое нужно уменьшить. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает единицу из значения по адресу addr. Это эквивалентно rsAtomicSub (addr, 1) .
rsAtomicInc : Потокобезопасное приращение
Параметры
| адрес | Адрес значения для увеличения. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно добавляет единицу к значению по адресу addr. Это эквивалентно rsAtomicAdd (addr, 1) .
rsAtomicMax : максимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение в addr как максимальное из *addr и value, т.е. *addr = max(*addr, value) .
rsAtomicMin : минимум потокобезопасности.
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сравнительная стоимость. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно устанавливает значение addr равным минимуму *addr и value, т.е. *addr = min(*addr, value) .
rsAtomicOr : Поточно-ориентированный побитовый или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение до или с. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполнять побитовое или два значения, сохраняя результат по адресу addr, т.е. *addr |= value .
rsAtomicSub : Потокобезопасное вычитание
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Сумма для вычета. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно вычитает значение из значения по адресу addr, т.е. *addr -= value .
rsAtomicXor : Поточно-ориентированное поразрядное исключающее или
Параметры
| адрес | Адрес значения, которое необходимо изменить. |
|---|
| ценить | Значение для xor. |
|---|
Возврат
| Значение *addr перед операцией. |
Атомарно выполняет побитовое исключающее ИЛИ двух значений, сохраняя результат по адресу addr, т.е. *addr ^= value .