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 2024-01-03 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 2024-01-03 UTC."],[],[]]