Funções de atualização atômicas do RenderScript
Mantenha tudo organizado com as coleções
Salve e categorize o conteúdo com base nas suas preferências.
Visão geral
Para atualizar valores compartilhados entre várias linhas de execução, use as funções abaixo.
Eles garantem que os valores sejam atualizados atomicamente, ou seja, que as leituras, atualizações e gravações da memória sejam feitas na ordem correta.
Essas funções são mais lentas que as equivalentes não atômicas. Portanto, use-as
apenas quando a sincronização for necessária.
No RenderScript, o código provavelmente será executado em linhas de execução
separadas, mesmo que você não as tenha criado explicitamente. O ambiente de execução
do RenderScript costuma dividir a execução de um kernel em várias
linhas de execução. A atualização de globais precisa ser feita com funções atômicas. Se possível,
modifique seu algoritmo para evitá-los completamente.
Resumo
| Funções |
|
rsAtomicAdd (link em inglês)
|
Adição segura de linha de execução
|
|
rsAtomicAnd (em inglês)
|
Segurança de encadeamento bit a bit e
|
|
rsAtomicCas (em inglês)
|
Comparação e definição segura para linhas de execução
|
|
rsAtomicDec (link em inglês)
|
Redução segura de linha de execução
|
|
rsAtomicInc (link em inglês)
|
Incremento seguro para thread
|
|
rsAtomicMax (em inglês)
|
Máximo seguro de linha de execução
|
|
rsAtomicMin (link em inglês)
|
Mínimo seguro para linha de execução
|
|
rsAtomicOr (link em inglês)
|
Segurança de thread bit a bit ou
|
|
rsAtomicSub (em inglês)
|
Subtração segura de linhas de execução
|
|
rsAtomicXor (em inglês)
|
Exclusividade de bit a bit seguro para thread
|
Funções
rsAtomicAdd
: adição segura para linhas de execução
Parâmetros
| Addr | Endereço do valor a ser modificado. |
| value | Valor a adicionar. |
Retorna
| Valor de *addr antes da operação. |
Adiciona atômicamente um valor ao valor em addr, ou seja, *addr += value.
rsAtomicAnd
: seguro para linha de execução bit a bit e
Parâmetros
| Addr | Endereço do valor a ser modificado. |
| value | Valor para e com. |
Retorna
| Valor de *addr antes da operação. |
Realiza atômicamente bit a bit e de dois valores, armazenando o resultado de volta em addr,
ou seja, *addr &= value.
rsAtomicCas
: comparação e definição segura para linhas de execução
Parâmetros
| Addr | Endereço do valor a ser comparado e substituído se o teste for aprovado. |
| compareValue | Valor com o qual testar *addr. |
| valor novo | Valor a ser gravado se o teste for aprovado. |
Retorna
| Valor de *addr antes da operação. |
Se o valor em addr corresponder a compareValue, o newValue será gravado em addr, ou seja, if (*addr == compareValue) { *addr = newValue; }.
Verifique se o valor foi gravado verificando se o valor retornado por rsAtomicCas() é compareValue.
rsAtomicDec
: decremento seguro para linhas de execução
Parâmetros
| Addr | Endereço do valor a ser diminuído. |
Retorna
| Valor de *addr antes da operação. |
Subtrai atômicamente um do valor na soma. É equivalente a rsAtomicSub(addr, 1).
rsAtomicInc
: incremento seguro para linhas de execução
Parâmetros
| Addr | Endereço do valor a ser incrementado. |
Retorna
| Valor de *addr antes da operação. |
Adiciona atômicamente um ao valor em addr. É equivalente a rsAtomicAdd(addr, 1).
rsAtomicMax
: máximo seguro para linhas de execução
Parâmetros
| Addr | Endereço do valor a ser modificado. |
| value | Valor de comparação. |
Retorna
| Valor de *addr antes da operação. |
Define atômicamente o valor em addr como o máximo de *addr e valor, ou seja, *addr = max(*addr, value).
rsAtomicMin
: mínimo seguro para linha de execução
Parâmetros
| Addr | Endereço do valor a ser modificado. |
| value | Valor de comparação. |
Retorna
| Valor de *addr antes da operação. |
Define atômicamente o valor em addr ao mínimo de *addr e value, ou seja, *addr = min(*addr, value).
rsAtomicOr
: segurança de linha de execução bit a bit ou
Parâmetros
| Addr | Endereço do valor a ser modificado. |
| value | Valor para ou com. |
Retorna
| Valor de *addr antes da operação. |
Executar atômicamente um ou dois valores bit a bit, armazenando o resultado em addr,
ou seja, *addr |= value.
rsAtomicSub
: subtração segura de linhas de execução
Parâmetros
| Addr | Endereço do valor a ser modificado. |
| value | Valor a ser subtraído. |
Retorna
| Valor de *addr antes da operação. |
Subtrai atômicamente um valor do valor no somador, ou seja, *addr -= value.
rsAtomicXor
: exclusivo bit a bit seguro para thread ou
Parâmetros
| Addr | Endereço do valor a ser modificado. |
| value | Valor a ser usado. |
Retorna
| Valor de *addr antes da operação. |
Executa atômicamente um xor bit a bit de dois valores, armazenando o resultado em addr,
ou seja, *addr ^= value.
O conteúdo e os exemplos de código nesta página estão sujeitos às licenças descritas na Licença de conteúdo. Java e OpenJDK são marcas registradas da Oracle e/ou suas afiliadas.
Última atualização 2025-07-27 UTC.
[[["Fácil de entender","easyToUnderstand","thumb-up"],["Meu problema foi resolvido","solvedMyProblem","thumb-up"],["Outro","otherUp","thumb-up"]],[["Não contém as informações de que eu preciso","missingTheInformationINeed","thumb-down"],["Muito complicado / etapas demais","tooComplicatedTooManySteps","thumb-down"],["Desatualizado","outOfDate","thumb-down"],["Problema na tradução","translationIssue","thumb-down"],["Problema com as amostras / o código","samplesCodeIssue","thumb-down"],["Outro","otherDown","thumb-down"]],["Última atualização 2025-07-27 UTC."],[],[]]