Обзор
Чтобы обновить значения, общие для нескольких потоков, используйте функции ниже. Они гарантируют атомарное обновление значений, т. е. чтение, обновление и запись в память выполняются в правильном порядке.
Эти функции медленнее, чем их неатомарные эквиваленты, поэтому используйте их только тогда, когда необходима синхронизация.
Обратите внимание, что в 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
.