Translation components API.

See the Weblate's Web API documentation for detailed description of the API.

GET /api/translations/freebsd-doc/articles_linux-emulation/pt_BR/changes/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "count": 66,
    "next": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/changes/?format=api&page=2",
    "previous": null,
    "results": [
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": null,
            "author": null,
            "timestamp": "2019-10-20T12:10:44.270576Z",
            "action": 0,
            "target": "",
            "id": 17674,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/17674/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api",
            "timestamp": "2019-10-20T12:39:56.207457Z",
            "action": 45,
            "target": "",
            "id": 50123,
            "action_name": "New contributor",
            "url": "https://translate-dev.freebsd.org/api/changes/50123/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaiobs2/?format=api",
            "timestamp": "2019-10-20T12:39:56.211580Z",
            "action": 2,
            "target": "Rafael Mentz Aquino, rafael@lk6.com.br, 2018\nEdson Brandi, ebrandi@FreeBSD.org, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018",
            "id": 50124,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/50124/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": null,
            "timestamp": "2019-10-20T12:45:28.272482Z",
            "action": 17,
            "target": "",
            "id": 50234,
            "action_name": "Committed changes",
            "url": "https://translate-dev.freebsd.org/api/changes/50234/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-02T18:34:38.524318Z",
            "action": 0,
            "target": "",
            "id": 50440,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/50440/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-02T20:37:09.791549Z",
            "action": 0,
            "target": "",
            "id": 50598,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/50598/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-03T00:21:42.998484Z",
            "action": 45,
            "target": "",
            "id": 51146,
            "action_name": "New contributor",
            "url": "https://translate-dev.freebsd.org/api/changes/51146/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-03T00:21:43.002038Z",
            "action": 2,
            "target": "translator-credits",
            "id": 51147,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/51147/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": null,
            "timestamp": "2019-11-03T00:46:16.292146Z",
            "action": 17,
            "target": "",
            "id": 51259,
            "action_name": "Committed changes",
            "url": "https://translate-dev.freebsd.org/api/changes/51259/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-03T00:52:07.118686Z",
            "action": 2,
            "target": "translator-credit",
            "id": 51298,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/51298/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-03T00:52:32.026650Z",
            "action": 2,
            "target": "translator-credits",
            "id": 51344,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/51344/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-03T13:04:39.780672Z",
            "action": 8,
            "target": "Rafael Mentz Aquino, rafael@lk6.com.br, 2018\nEdson Brandi, ebrandi@FreeBSD.org, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018",
            "id": 51424,
            "action_name": "Translation reverted",
            "url": "https://translate-dev.freebsd.org/api/changes/51424/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-03T13:24:16.718077Z",
            "action": 8,
            "target": "Edson Brandi, ebrandi@FreeBSD.org, 2018",
            "id": 51470,
            "action_name": "Translation reverted",
            "url": "https://translate-dev.freebsd.org/api/changes/51470/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-03T13:26:04.977687Z",
            "action": 2,
            "target": "Rafael Mentz Aquino, rafael@lk6.com.br, 2018\nEdson Brandi, ebrandi@FreeBSD.org, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018",
            "id": 51515,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/51515/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-03T13:34:07.601239Z",
            "action": 2,
            "target": "Edson Brandi, ebrandi@FreeBSD.org, 2018",
            "id": 51560,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/51560/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-03T13:52:09.831429Z",
            "action": 2,
            "target": "translator-credits",
            "id": 51602,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/51602/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26650/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-11-04T00:07:51.133794Z",
            "action": 2,
            "target": "Edson Brandi, ebrandi@FreeBSD.org, 2018\nKanazuchi, contato@kanazuchi.com, 2018\nDanilo G. Baio, dbaio@FreeBSD.org, 2018",
            "id": 51668,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/51668/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": null,
            "timestamp": "2019-11-04T00:20:27.138969Z",
            "action": 17,
            "target": "",
            "id": 51706,
            "action_name": "Committed changes",
            "url": "https://translate-dev.freebsd.org/api/changes/51706/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26702/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:55:33.238428Z",
            "action": 2,
            "target": "Suporte PECoff para executáveis PECoff do FreeBSD",
            "id": 52098,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52098/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26704/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:55:38.771395Z",
            "action": 2,
            "target": "Emulações ativamente desenvolvidas são a camada <trademark class=\"registered\">Linux</trademark> e várias camadas FreeBSD-on-FreeBSD. Outros não devem funcionar corretamente nem ser utilizáveis nos dias de hoje.",
            "id": 52099,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52099/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26709/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:55:42.681629Z",
            "action": 2,
            "target": "Syscalls no FreeBSD são emitidos executando a interrupção <literal> 0x80 </literal> com o registrador <varname>%eax</varname> definido para um número de syscall desejado com argumentos passados na pilha.",
            "id": 52100,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52100/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26710/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:55:47.817413Z",
            "action": 2,
            "target": "Quando um processo emite uma interrupção <literal>0x80</literal>, a syscall manipuladora de trap <literal>int0x80</literal> é proclamada (definida em <filename>sys/i386/i386/exception.s</filename>), que prepara argumentos (ou seja, copia-os para a pilha) para uma chamada para uma função C <citerefentry><refentrytitle>syscall</refentrytitle><manvolnum>2</manvolnum></citerefentry> (definida em <filename>sys/i386/i386/trap.c</filename>), que processa o trapframe passado. O processamento consiste em preparar a syscall (dependendo da entrada <literal>sysvec</literal>), determinando se a syscall é de 32 ou 64 bits (muda o tamanho dos parâmetros), então os parâmetros são copiados, incluindo a syscall. Em seguida, a função syscall real é executada com o processamento do código de retorno (casos especiais para erros <literal>ERESTART</literal> e <literal>EJUSTRETURN</literal>). Finalmente, um <literal>userret()</literal> é agendado, trocando o processo de volta ao ritmo do usuário. Os parâmetros para a syscall manipuladora atual são passados na forma de argumentos <literal>struct thread *td </literal>, <literal>struct syscall args*</literal> onde o segundo parâmetro é um ponteiro para o copiado na estrutura de parâmetros.",
            "id": 52101,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52101/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26726/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:55:52.229124Z",
            "action": 2,
            "target": "Syscalls em <trademark class=\"registered\">Linux</trademark> são executados (no espaço de usuário) usando macros <literal>syscallX</literal> onde X substitui um número que representa o número de parâmetros da syscall dada. Essa macro traduz um código que carrega o registro <varname>% eax </varname> com um número da syscall e executa a interrupção <literal>0x80</literal>. Depois disso, um retorn da syscall é chamado, o que traduz valores de retorno negativos para valores <literal>errno</literal> positivos e define <literal>res</literal> para <literal>-1</literal> em caso de erro. Sempre que a interrupção <literal>0x80</literal> é chamada, o processo entra no kernel no manipulador de trap das syscalls. Essa rotina salva todos os registros na pilha e chama a entrada syscall selecionada. Note que a convenção de chamadas <trademark class=\"registered\">Linux</trademark> espera que os parâmetros para o syscall sejam passados pelos registradores como mostrado aqui:",
            "id": 52102,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52102/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26764/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:55:56.415800Z",
            "action": 2,
            "target": "Nenhuma emulação é perfeita e as emulações tendem a não ter algumas partes, mas isso geralmente não causa nenhuma desvantagem séria. Imagine um emulador de console de jogos que emula tudo, menos a saída de música. Não há dúvida de que os jogos são jogáveis e pode-se usar o emulador. Pode não ser tão confortável quanto o console original, mas é um compromisso aceitável entre preço e conforto.",
            "id": 52103,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52103/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26784/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:00.575583Z",
            "action": 2,
            "target": "Operações atômicas são implementadas através de um conjunto de funções que executam aritmética simples em operandos de memória de maneira atômica com relação a eventos externos (interrupções, preempção, etc.). Operações atômicas podem garantir atomicidade apenas em pequenos tipos de dados (na ordem de magnitude do tipo de dados C da arquitetura <literal>.long.</literal>), portanto raramente devem ser usados diretamente no código de nível final, se não apenas para operações muito simples (como configuração de flags em um bitmap, por exemplo). De fato, é bastante simples e comum escrever uma semântica errada baseada apenas em operações atômicas (geralmente referidas como lock-less). O kernel do FreeBSD oferece uma maneira de realizar operações atômicas em conjunto com uma barreira de memória. As barreiras de memória garantirão que uma operação atômica ocorrerá seguindo alguma ordem especificas em relação a outros acessos à memória. Por exemplo, se precisarmos que uma operação atômica aconteça logo depois que todas as outras gravações pendentes (em termos de instruções reordenando atividades de buffers) forem concluídas, precisamos usar explicitamente uma barreira de memória em conjunto com essa operação atômica. Portanto, é simples entender por que as barreiras de memória desempenham um papel fundamental na construção de bloqueios de alto nível (assim como referências, exclusões mútuas, etc.). Para uma explicação detalhada sobre operações atômicas, consulte <citerefentry><refentrytitle>atomic</refentrytitle><manvolnum>9</manvolnum></citerefentry>. É muito, no entanto, notar que as operações atômicas (e as barreiras de memória também) devem, idealmente, ser usadas apenas para construir bloqueios front-ending (como mutexes).",
            "id": 52104,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52104/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26786/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:04.583897Z",
            "action": 2,
            "target": "Refcounts são interfaces para manipular contadores de referência. Eles são implementados por meio de operações atômicas e destinam-se a ser usados apenas para casos em que o contador de referência é a única coisa a ser protegida, portanto, até mesmo algo como um spin-mutex é obsoleto. Usar a interface de recontagem para estruturas, onde um mutex já é usado, geralmente está errado, pois provavelmente devemos fechar o contador de referência em alguns caminhos já protegidos. Uma manpage discutindo refcount não existe atualmente, apenas verifique <filename>sys/refcount.h</filename> para uma visão geral da API existente.",
            "id": 52105,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52105/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26794/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:08.796048Z",
            "action": 2,
            "target": "Spin locks permitem que os acumuladores rotacionarem até que eles não consigam adquirir um lock. Uma questão importante é quando um segmento contesta em um spin lock se não for desmarcado. Uma vez que o kernel do FreeBSD é preventivo, isto expõe o spin lock ao risco de deadlocks que podem ser resolvidos apenas desabilitando as interrupções enquanto elas são adquiridas. Por essa e outras razões (como falta de suporte à propagação de prioridade, falta de esquemas de balanceamento de carga entre CPUs, etc.), os spin locks têm a finalidade de proteger endereçamentos muito pequenos de código ou, idealmente, não serem usados se não solicitados explicitamente ( explicado posteriormente).",
            "id": 52106,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52106/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26816/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:13.501813Z",
            "action": 2,
            "target": "Geralmente, eles devem ser usados apenas em um contexto específico e, mesmo que possam substituir bloqueios, eles devem ser evitados porque eles não permitem o diagnóstico de problemas simples com ferramentas de depuração de bloqueio (como <citerefentry><refentrytitle>witness</refentrytitle><manvolnum>4</manvolnum></citerefentry>).",
            "id": 52107,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52107/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26896/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:17.941088Z",
            "action": 2,
            "target": "A camada de emulação do <trademark class=\"registered\">Linux</trademark> no FreeBSD suporta a configuração de tempo de execução da versão emulada. Isso é feito via <citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>, a saber <literal>compat.linux.osrelease</literal>. A configuração dessa <citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> afeta o comportamento de tempo de execução da camada de emulação. Quando definido como 2.6.x, ele configura o valor de <literal>linux_use_linux26</literal> enquanto a configuração para algo mais o mantém não definido. Essa variável (mais variáveis por prisão do mesmo tipo) determina se a infraestrutura 2.6 (principalmente o PID) é usada no código ou não. A configuração da versão é feita em todo o sistema e isso afeta todos os processos <trademark class=\"registered\">Linux</trademark>. A <citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry> não deve ser alterada ao executar qualquer binário do <trademark class=\"registered\">Linux</trademark>, pois pode causar danos .",
            "id": 52108,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52108/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26937/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:21.856402Z",
            "action": 2,
            "target": "Threads precisam de algum tipo de sincronização e <trademark class=\"registered\">POSIX</trademark> fornece alguns deles: mutexes para exclusão mútua, bloqueios de leitura/gravação para exclusão mútua com relação de polarização de leituras e gravações e variáveis de condição para sinalizar um mudança de status. É interessante observar que a API de thread <trademark class=\"registered\">POSIX</trademark> não tem suporte para semáforos. Essas implementações de rotinas de sincronização são altamente dependentes do tipo de suporte a threading que temos. No modelo puro 1:M (espaço de usuário), a implementação pode ser feita apenas no espaço do usuário e, portanto, ser muito rápida (as variáveis de condição provavelmente serão implementadas usando sinais, ou seja, não rápido) e simples. No modelo 1:1, a situação também é bastante clara - as threading devem ser sincronizadas usando as facilidades do kernel (o que é muito lento porque uma syscall deve ser executada). O cenário M:N misto combina apenas a primeira e a segunda abordagem ou depende apenas do kernel. A sincronização de threads é uma parte vital da programação ativada por threads e seu desempenho pode afetar muito o programa resultante. Benchmarks recentes no sistema operacional FreeBSD mostraram que uma implementação sx_lock melhorada gerou 40% de aceleração no <firstterm>ZFS</firstterm> (um usuário sx pesado), isso é algo in-kernel, mas mostra claramente quão importante é o desempenho das primitivas de sincronização. .",
            "id": 52109,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52109/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/27007/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:26.449357Z",
            "action": 2,
            "target": "Cada syscall deve ser debugável. Para isso, introduzimos uma pequena infra-estrutura. Nós temos o recurso ldebug, que informa se uma dada syscall deve ser depurada (configurável através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas são usadas para alterar uma string imprimível para mensagens uniformes de depuração.",
            "id": 52110,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52110/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26703/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:47.915760Z",
            "action": 2,
            "target": "Emulação SVR4 do <trademark class=\"registered\">UNIX</trademark> System V revisão 4",
            "id": 52112,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52112/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26887/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:56:53.592811Z",
            "action": 2,
            "target": "Parte da amada de emulação -MI do <trademark class=\"registered\">Linux </trademark>",
            "id": 52113,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52113/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26958/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:57:04.603940Z",
            "action": 2,
            "target": "Esta operação tem um futex em <varname>uaddr</varname> e acorda os primeiros futexes <varname>val</varname> enfileirados neste futex.",
            "id": 52114,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52114/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26669/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:57:21.516841Z",
            "action": 2,
            "target": "Um olhar para dentro…",
            "id": 52115,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52115/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26671/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/ebrandi/?format=api",
            "timestamp": "2019-11-09T00:57:38.314490Z",
            "action": 2,
            "target": "O que é o <trademark class=\"registered\"> UNIX </trademark>",
            "id": 52116,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52116/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": null,
            "timestamp": "2019-11-09T09:08:40.484159Z",
            "action": 17,
            "target": "",
            "id": 52127,
            "action_name": "Committed changes",
            "url": "https://translate-dev.freebsd.org/api/changes/52127/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-12-09T23:50:29.423123Z",
            "action": 0,
            "target": "",
            "id": 52728,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/52728/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-12-09T23:50:29.499954Z",
            "action": 44,
            "target": "",
            "id": 52730,
            "action_name": "New string to translate",
            "url": "https://translate-dev.freebsd.org/api/changes/52730/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": null,
            "timestamp": "2019-12-10T00:07:22.892450Z",
            "action": 17,
            "target": "",
            "id": 52830,
            "action_name": "Committed changes",
            "url": "https://translate-dev.freebsd.org/api/changes/52830/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/26887/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2019-12-10T00:28:48.656194Z",
            "action": 2,
            "target": "Parte da camada de emulação -MI do <trademark class=\"registered\">Linux</trademark>",
            "id": 52834,
            "action_name": "Translation changed",
            "url": "https://translate-dev.freebsd.org/api/changes/52834/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": null,
            "timestamp": "2019-12-10T00:29:10.974893Z",
            "action": 17,
            "target": "",
            "id": 52835,
            "action_name": "Committed changes",
            "url": "https://translate-dev.freebsd.org/api/changes/52835/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T18:14:56.001893Z",
            "action": 0,
            "target": "",
            "id": 64967,
            "action_name": "Resource update",
            "url": "https://translate-dev.freebsd.org/api/changes/64967/?format=api"
        },
        {
            "unit": null,
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T18:14:56.052822Z",
            "action": 44,
            "target": "",
            "id": 64969,
            "action_name": "New string to translate",
            "url": "https://translate-dev.freebsd.org/api/changes/64969/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157279/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T19:19:02.476435Z",
            "action": 5,
            "target": "A API comum do <trademark class=\"registered\">UNIX</trademark> define uma syscall como uma forma de emitir comandos de um processo do espaço do usuário para o kernel. A implementação mais comum é usando uma instrução de interrupção ou especializada (pense em instruções <literal>SYSENTER</literal>/<literal>SYSCALL</literal> para ia32). Syscalls são definidos por um número. Por exemplo, no FreeBSD, a syscall número 85 é a syscall <citerefentry><refentrytitle>swapon</refentrytitle><manvolnum>2</manvolnum></citerefentry> e a syscall número 132 é a syscall <citerefentry><refentrytitle>mkfifo</refentrytitle><manvolnum>2</manvolnum></citerefentry>. Algumas syscalls precisam de parâmetros, que são passados do espaço do usuário para o espaço do kernel de várias maneiras (dependente da implementação). Syscalls são síncronas.",
            "id": 65478,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/65478/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157280/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T19:19:08.531031Z",
            "action": 5,
            "target": "O FreeBSD é um sistema operacional baseado no <trademark class=\"registered\">UNIX</trademark> com todos os recursos do <trademark class=\"registered\">UNIX</trademark>. Multitarefa preemptiva, necessidades de  multiusuário, rede TCP/IP, proteção de memória, suporte a multiprocessamento simétrico, memória virtual com VM mesclada e cache de buffer, todos eles estão lá. Um dos recursos interessantes e extremamente úteis é a capacidade de emular outros sistemas operacionais <trademark class=\"registered\">UNIX</trademark>-like. A partir de dezembro de 2006 e do desenvolvimento do 7-CURRENT, as seguintes funcionalidades de emulação são suportadas:",
            "id": 65479,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/65479/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157281/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T19:19:14.539425Z",
            "action": 5,
            "target": "O <trademark class=\"registered\">Linux</trademark> segue o esquema tradicional do <trademark class=\"registered\">UNIX</trademark> de dividir a execução de um processo em duas metades: o kernel e o espaço do usuário. O kernel pode ser inserido de duas maneiras: via trap ou via syscall. O retorno é tratado apenas de uma maneira. A descrição mais detalhada aplica-se ao <trademark class=\"registered\">Linux</trademark> 2.6 na arquitetura <trademark>i386</trademark>. Esta informação foi retirada de [2].",
            "id": 65480,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/65480/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157282/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T19:19:18.638987Z",
            "action": 5,
            "target": "Na versão 2.6, o sistema operacional <trademark class=\"registered\">Linux</trademark> redefiniu algumas das primitivas tradicionais do <trademark class=\"registered\">UNIX</trademark>, especialmente PID, TID e thread. O PID é definido para não ser exclusivo para cada processo, portanto, para alguns processos (threading) <citerefentry><refentrytitle>getppid</refentrytitle><manvolnum>2</manvolnum></citerefentry> retorna o mesmo valor. A identificação exclusiva do processo é fornecida pelo TID. Isso ocorre porque o <firstterm>NPTL</firstterm> (Nova Biblioteca de threading <trademark class=\"registered\">POSIX</trademark>) define threading para serem processos normais (assim chamado threading 1:1). Gerar um novo processo no <trademark class=\"registered\">Linux</trademark> 2.6 acontece usando a syscall <literal>clone</literal> (as variantes do fork são reimplementadas usando-o). Esta syscall clone define um conjunto de sinalizadores que afetam o comportamento do processo de clonagem em relação à implementação do threading. A semântica é um pouco confusa, pois não existe uma única bandeira dizendo a syscall para criar uma thread.",
            "id": 65481,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/65481/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157283/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T19:19:25.207334Z",
            "action": 5,
            "target": "A solução que o <trademark class=\"registered\">Linux</trademark> 2.6 implementa é chamada de futexes. Futexes implementam a verificação de contenção no espaço do usuário e chama primitivas do kernel apenas em um caso de contenção. Assim, o caso típico ocorre sem qualquer intervenção do kernel. Isso produz uma implementação de primitivas de sincronização razoavelmente rápida e flexível.",
            "id": 65482,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/65482/?format=api"
        },
        {
            "unit": "https://translate-dev.freebsd.org/api/units/157284/?format=api",
            "component": "https://translate-dev.freebsd.org/api/components/freebsd-doc/articles_linux-emulation/?format=api",
            "translation": "https://translate-dev.freebsd.org/api/translations/freebsd-doc/articles_linux-emulation/pt_BR/?format=api",
            "user": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "author": "https://translate-dev.freebsd.org/api/users/dbaio/?format=api",
            "timestamp": "2020-04-18T19:19:31.569595Z",
            "action": 5,
            "target": "Esta infra-estrutura é necessária para evitar corridas ao abrir arquivos fora do diretório de trabalho. Imagine que um processo consiste em duas threads, thread A e thread B. Thread A emite <literal>open (./tmp/foo/bah., Flags, mode)</literal> e antes de retornar ele se antecipa e a thread B é executada. A thread B não se preocupa com as necessidades da thread A e renomeia ou remove o <filename>/tmp/foo/</filename>. Nós temos uma corrida. Para evitar isso, podemos abrir o <filename>/tmp/foo</filename> e usá-lo como <varname>dirfd</varname> para a syscall <function>openat</function>. Isso também permite que o usuário implemente diretórios de trabalho por thread.",
            "id": 65483,
            "action_name": "New translation",
            "url": "https://translate-dev.freebsd.org/api/changes/65483/?format=api"
        }
    ]
}