Quiz 13 - Introdução
1. **Como o Rust garante a segurança em código multi-thread?**
Através de um Garbage Collector especializado
Usando o sistema de Ownership e o sistema de tipos (Send/Sync) em tempo de compilação
Impedindo o uso de mais de 2 threads
Verificando os erros apenas durante a execução
> **Explicação**: O Rust evita "data races" garantindo que dados compartilhados sejam acessados de forma sincronizada ou tenham um único dono.
2. **A macro `thread::spawn` recebe como argumento principal:**
Uma string com o nome do arquivo
Uma closure (função anônima) contendo o código a ser executado
O número de processadores
Uma lista de variáveis globais
> **Explicação**: A closure define o comportamento que a nova thread irá executar.
3. **Para que serve o método `.join()` em uma Thread Handle?**
Para juntar duas threads em uma só
Para esperar que a thread termine sua execução antes de continuar
Para deletar a thread
Para pausar a thread principal
> **Explicação**: `join` bloqueia a thread atual até que a thread representada pelo handle termine.
4. **A sigla MPSC em Canais significa:**
Multiple Producer, Single Choice
Multiple Producer, Single Consumer
Mini Program, Super Code
Many Processors, Single Core
> **Explicação**: Significa que várias partes do código podem enviar mensagens, mas apenas uma pode recebê-las.
5. **Qual a função do `Mutex`?**
Acelerar o acesso aos dados
Garantir que apenas uma thread acesse os dados por vez através de um travamento (lock)
Converter dados em Strings
Enviar dados pela internet
> **Explicação**: Mutex significa "Mutual Exclusion" (Exclusão Mútua).
6. **O que acontece se uma thread tentar acessar um Mutex que já está travado por outra?**
Ela dá erro e encerra o programa
Ela fica bloqueada (em espera) até que o lock seja liberado
Ela ignora o travamento e lê os dados mesmo assim
Ela deleta os dados
> **Explicação**: O Mutex garante o acesso sequencial e seguro.
7. **Para compartilhar a propriedade de um valor entre múltiplas threads, usamos:**
`Rc` (Reference Counted)
`Arc` (Atomic Reference Counted)
`Box`
Uma variável global simples
> **Explicação**: O `Arc` é a versão segura para threads (atômica) do contador de referências.
8. **Qual a diferença entre as traits `Send` e `Sync`?**
`Send` é para enviar e-mail; `Sync` é para arquivos
`Send` permite transferir a posse entre threads; `Sync` permite acesso via referências em múltiplas threads
Não há diferença, são sinônimos
Apenas tipos numéricos implementam essas traits
> **Explicação**: Elas são as "marcas" que dizem ao compilador se o tipo é seguro para concorrência.
9. **O Rust permite "corridas de dados" (data races)?**
Sim, mas apenas se usarmos `unsafe`
Não, o sistema de tipos impede data races em código seguro
Sim, é um problema comum em programas Rust
Apenas em computadores com muitos núcleos
> **Explicação**: O design do Rust elimina data races, que são um dos bugs mais difíceis de encontrar em C/C++.
10. **O lema do Rust para concorrência é:**
"Compartilhe tudo o tempo todo"
"Não comunique compartilhando memória; compartilhe memória comunicando"
"Threads são perigosas, evite-as"
"Use sempre variáveis globais"
> **Explicação**: O Rust incentiva o uso de canais para passar mensagens em vez de gerenciar travas manuais sempre que possível.