Parte 02 ======== Saída inicial da *log* ---------------------- .. code-block:: apache *** Booting Zephyr OS build zephyr-v40200 *** [00:00:00.000,000] app: add_thread_entry: [add] count: 1 [00:00:00.000,000] app: sub_thread_entry: [sub] count: 0 [00:00:01.000,000] app: add_thread_entry: [add] count: 1 [00:00:01.500,000] app: sub_thread_entry: [sub] count: 0 [00:00:02.000,000] app: add_thread_entry: [add] count: 1 [00:00:03.000,000] app: sub_thread_entry: [sub] count: 0 [00:00:03.000,000] app: add_thread_entry: [add] count: 1 [00:00:04.001,000] app: add_thread_entry: [add] count: 2 [00:00:04.500,000] app: sub_thread_entry: [sub] count: 1 [00:00:05.001,000] app: add_thread_entry: [add] count: 2 [00:00:06.001,000] app: sub_thread_entry: [sub] count: 1 [00:00:06.001,000] app: add_thread_entry: [add] count: 2 [00:00:07.001,000] app: add_thread_entry: [add] count: 3 [00:00:07.501,000] app: sub_thread_entry: [sub] count: 2 [00:00:08.001,000] app: add_thread_entry: [add] count: 3 [00:00:09.001,000] app: sub_thread_entry: [sub] count: 2 [00:00:09.002,000] app: add_thread_entry: [add] count: 3 [00:00:10.002,000] app: add_thread_entry: [add] count: 4 [00:00:10.501,000] app: sub_thread_entry: [sub] count: 3 [00:00:11.002,000] app: add_thread_entry: [add] count: 4 [00:00:12.002,000] app: sub_thread_entry: [sub] count: 3 [00:00:12.002,000] app: add_thread_entry: [add] count: 4 [00:00:13.002,000] app: add_thread_entry: [add] count: 5 Respostas --------- 1. O ``mutex`` eliminou os problemas observados na Parte 1? Sim, O mutex eliminou as condições de corrida observadas na Parte 1, garantindo que apenas uma *thread* por vez possa modificar a variável ``count``. Entretanto, o mutex não controla limites lógicos da variável, como impedir que ela fique negativa ou ultrapasse uma capacidade máxima. 2. O ``mutex`` garante a consistência do valor de ``count``? Sim, o ``mutex`` garante exclusão mútua durante o acesso à variável ``count``, impedindo acessos concorrentes e evitando condições de corrida. Dessa forma, as operações de incremento e decremento ocorrem de forma consistente. 3. Qual recurso está sendo protegido pelo ``mutex``? O recurso protegido é o uso e acesso da variável ``count``. 4. Qual é a principal função de um ``mutex`` neste contexto? A principal função do ``mutex`` é garantir exclusão mútua no acesso ao recurso compartilhado, permitindo que apenas uma *thread* por vez execute operações sobre a variável ``count`` e evitando condições de corrida.