diff options
Diffstat (limited to 'files/pt-br/web/javascript/reference/global_objects/atomics/index.html')
| -rw-r--r-- | files/pt-br/web/javascript/reference/global_objects/atomics/index.html | 155 |
1 files changed, 155 insertions, 0 deletions
diff --git a/files/pt-br/web/javascript/reference/global_objects/atomics/index.html b/files/pt-br/web/javascript/reference/global_objects/atomics/index.html new file mode 100644 index 0000000000..6f6a1dfabe --- /dev/null +++ b/files/pt-br/web/javascript/reference/global_objects/atomics/index.html @@ -0,0 +1,155 @@ +--- +title: Atomics +slug: Web/JavaScript/Reference/Global_Objects/Atomics +translation_of: Web/JavaScript/Reference/Global_Objects/Atomics +--- +<div>{{JSRef}} {{SeeCompatTable}}</div> + +<p>O objeto <strong><code>Atomics </code></strong>fornece operações atômicas como metodos estáticos. Eles são usados com objetos {{jsxref("SharedArrayBuffer")}}.</p> + +<p>As operações atômicas estão localizadas no modulo <code>Atomics</code>. Diferente de outros <em>global objects</em>, <code>Atomics</code> não é um construtor. Você não deve usa-lo com o <a href="/en-US/docs/Web/JavaScript/Reference/Operators/new"><code>new</code> operator</a> ou invocar objetos <code>Atomics</code> como funções. Todas as propriedades e método do <code>Atomics</code> são estáticos (como é o caso com o objeto {{jsxref("Math")}}, por exemplo).</p> + +<h2 id="Métodos">Métodos</h2> + +<h3 id="Operações_Atômicas">Operações Atômicas</h3> + +<p>Quando a memória é compartilhada, multiplas threads podem ser lidas e escritas no mesmo dado da memória. Operações atômicas garantem que os valores previstos sejam lidos e escritos, estas operações são finalizadas antes da próxima operação iniciar e que as mesmas não sejam interrompidas.</p> + +<dl> + <dt>{{jsxref("Atomics.add()")}}</dt> + <dd>Adiciona o valor recebido na posiçao recebida no array. Retorna o valor anterior nesta posição.</dd> + <dt>{{jsxref("Atomics.and()")}}</dt> + <dd>Calcula um bit a bit AND na posição recebida no array. Retorna o valor anterior nesta posição.</dd> + <dt>{{jsxref("Atomics.compareExchange()")}}</dt> + <dd>Armazena o valor recebido na posição recebida no array, se este foi igual ao valor recebido. Retorna o valor anterior nesta posição.</dd> + <dt>{{jsxref("Atomics.exchange()")}}</dt> + <dd>Armazena o valor recebido na posição recebida no array. Retorna o valor anterior.</dd> +</dl> + +<dl> + <dt>{{jsxref("Atomics.load()")}}</dt> + <dd>Retorna o valor na posição recebida no array.</dd> + <dt>{{jsxref("Atomics.or()")}}</dt> + <dd>Calcula um bit a bit OR na posição recebida no array. Retorna o valor anterior nesta posição.</dd> + <dt>{{jsxref("Atomics.store()")}}</dt> + <dd>Armazena o valor recebido na posição recebida no array. Retorna o valor.</dd> + <dt>{{jsxref("Atomics.sub()")}}</dt> + <dd>Subtrai o valor recebido na posição recebida no array. Retorna o valor anterior nesta posição.</dd> + <dt>{{jsxref("Atomics.xor()")}}</dt> + <dd>Calcula um bit a bit XOR na posição recebida no array. Retorna o valor anterior nesta posição.</dd> +</dl> + +<h3 id="Wait_e_wake">Wait e wake</h3> + +<p>Os métodos <code>wait()</code> e <code>wake()</code> são modelados no Linux futexes ("fast user-space mutex") e fornece formas de aguardar até que certas condições se tornem <code>true</code> e são tipicamente usadas como construtores de bloco.</p> + +<dl> + <dt>{{jsxref("Atomics.wait()")}}</dt> + <dd> + <p>Verifica se a posição informada no array ainda contém a valor recebido e <span id="result_box" lang="pt"><span>dorme</span> <span>à espera</span> <span>ou</span> até o <span>tempo limite. Retorna </span></span> <code>"ok"</code>, <code>"not-equal"</code>, ou <code>"timed-out"</code>. <span id="result_box" lang="pt"><span>Se</span> a <span>espera não</span> for<span> permitida</span> <span>no agente</span> <span>de chamada</span> <span>ele irá lançar uma exceção</span> <span>de erro (muitos navegadores não permitem </span></span> <code>wait()</code> na thread main do navegador).</p> + </dd> + <dt>{{jsxref("Atomics.wake()")}}</dt> + <dd>"Acorda" alguns agentes que estavam "dormindo" na lista de espera na posição recebida do array. Retorna o número de agentes que estão sendo "acordados".</dd> + <dt>{{jsxref("Atomics.isLockFree()", "Atomics.isLockFree(size)")}}</dt> + <dd> + <p><span id="result_box" lang="pt"><span>Uma otimização</span> <span>primitiva</span> <span>que</span> <span>pode</span> <span>ser usada para</span> <span>determinar se deve ser usado</span> lock<span> ou</span> <span>operações</span> <span>atômicas. Retorna <code>true</code>, se</span> <span>uma operação</span> <span>atômica</span> <span>em matrizes</span> <span>de</span> um <span>dado</span> <span>tamanho do elemento</span> <span>vai</span> <span>ser</span> <span>implementado</span> <span>utilizando uma operação</span> <span>atômica</span> <span>de hardware</span> <span>(</span><span>como</span> <span>oposição a lock)</span><span>.</span> <span>Só para experientes</span><span>.</span></span></p> + </dd> +</dl> + +<h2 id="Especificações">Especificações</h2> + +<table class="standard-table"> + <tbody> + <tr> + <th scope="col">Especificações</th> + <th scope="col">Status</th> + <th scope="col">Comentário</th> + </tr> + <tr> + <td>{{SpecName('Shared Memory', '#AtomicsObject', 'Atomics')}}</td> + <td>{{Spec2('Shared Memory')}}</td> + <td>Definição inicial.</td> + </tr> + </tbody> +</table> + +<h2 id="Compatibilidade_nos_navegadores">Compatibilidade nos navegadores</h2> + +<p>{{CompatibilityTable}}</p> + +<div id="compat-desktop"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Chrome</th> + <th>Edge</th> + <th>Firefox (Gecko)</th> + <th>Internet Explorer</th> + <th>Opera</th> + <th>Safari</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatNo}} [2]</td> + <td>{{CompatNo}}</td> + <td>{{CompatGeckoDesktop("46")}} [1] [3]</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + </tbody> +</table> +</div> + +<div id="compat-mobile"> +<table class="compat-table"> + <tbody> + <tr> + <th>Feature</th> + <th>Android</th> + <th>Chrome for Android</th> + <th>Firefox Mobile (Gecko)</th> + <th>IE Mobile</th> + <th>Opera Mobile</th> + <th>Safari Mobile</th> + </tr> + <tr> + <td>Basic support</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatGeckoMobile("46")}} [1]</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + <td>{{CompatNo}}</td> + </tr> + </tbody> +</table> +</div> + +<p>[1] This feature is disabled by a preference setting. In about:config, set <code>javascript.options.shared_memory</code> to <code>true</code>. </p> + +<p>[2] The implementation is under development and needs these runtime flags: <code>--js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer</code></p> + +<h2 id="Observações_de_compatibilidade">Observações de compatibilidade</h2> + +<p>[3] A especificação de compartilhamento de memória está sendo estabilizada. Anterior ao SpiderMonkey 48 {{geckoRelease(48)}}, a última API e semântica não foram implementadas ainda. As alterações entre as versões 46 e 48 do Firefox são:</p> + +<ul> + <li>Os métodos <code>Atomics.futexWakeOrRequeue()</code> e <code>Atomics.fence()</code> foram totalmente removidos ({{bug(1259544)}} e {{bug(1225028)}}).</li> + <li>O método {{jsxref("Atomics.wait()")}} e {{jsxref("Atomics.wake()")}} foram nomeados como <code>Atomics.futexWait()</code> e <code>Atomics.futexWake()</code> ({{bug(1260910)}}). Os nomes antigos foram mantidos como alias, e serão removidos na versão 49 ({{bug(1262062)}}).</li> + <li>As propriedades <code>Atomics.OK</code>, <code>Atomics.TIMEDOUT</code>, <code>Atomics.NOTEQUAL</code> foram removidas. O método {{jsxref("Atomics.wait()")}} agora retorna "ok", "timed-out" e "not-equal" ({{bug(1260835)}}).</li> + <li> + <p>O parâmetro <code>count</code> do método {{jsxref("Atomics.wake()")}} foi alterado: este agora possui o valor padrão <code>+Infinity</code>, e não <code>0</code> ({{bug(1253350)}}).</p> + </li> +</ul> + +<h2 id="Veja_Também">Veja Também</h2> + +<ul> + <li>{{jsxref("ArrayBuffer")}}</li> + <li><a href="/en-US/docs/Web/JavaScript/Typed_arrays">JavaScript typed arrays</a></li> + <li><a href="/en-US/docs/Web/API/Web_Workers_API">Web Workers</a></li> + <li><a href="https://github.com/lars-t-hansen/parlib-simple">parlib-simple </a>– a simple library providing synchronization and work distribution abstractions.</li> + <li><a href="https://github.com/tc39/ecmascript_sharedmem/blob/master/TUTORIAL.md">Shared Memory – a brief tutorial</a></li> +</ul> |
