Questões de Concurso sobre Threads

 
 
Disciplina
Assunto 1
Banca
Instituição
Cargo
Ano
Carreira
Área de formação
Escolaridade
Dificuldade
 
Comentários:
Professores
Alunos
Meus Comentários
Vídeo
 
Minhas questões:
Resolvidas
Não resolvidas
Certas
Erradas
 
Tipo de questão:
Certo e errado
Múltipla escolha
Incluir questões:
Anuladas
Desatualizadas
 
Questões:
Todas as questões
 
Filtro simplificado
 
Questões
Todas as questões
 
76 questões encontradas
Questões por página
20
Mais recentes
 

A criação de threads, dentro de um mesmo processo, implica a criação de uma cópia independente do espaço de endereçamento virtual, não sendo compartilhados os dados globais e as variáveis estáticas entre o processo e a thread.


C

Certo


E

Errado

Assinale a alternativa correta relacionada com processos e threads em sistemas operacionais.


A

A semelhança entre ambos é que eles compartilham um espaço de endereçamento e dados.


B

O modelo de programação que emprega processos é mais simples do que o que utiliza threads.


C

Os processos podem ser utilizados em sistemas com múltiplas CPUs, ao contrário dos threads.


D

Os threads são mais rápidos para serem criados e destruídos do que os processos.


E

Um processo pode estar em um dos cinco estados: Em Execução, Bloqueado, Pronto, Aguardando e Eliminado.

Analise o seguinte programa em Java SE 11:


class Contador {

int valor = 0;


void incrementar() {

valor++;

}

}


public class Teste {


public static void main(String[] args) throws Exception {


Contador c = new Contador();


Thread t1 = new Thread(() -> {

for(int i = 0; i < 1000; i++)

c.incrementar();

});


Thread t2 = new Thread(() -> {

for(int i = 0; i < 1000; i++)

c.incrementar();

});


t1.start();

t2.start();


t1.join();

t2.join();


System.out.println(c.valor);

}

}


Considerando a execução concorrente das threads e o funcionamento da instrução valor++. E, ainda, que a JVM pode intercalar as operações das threads de forma imprevisível e que a operação de incremento (valor++) não é atômica na especificação Java, assinale a alternativa correta.


A

O uso de join() garante que não haverá interferência entre as threads.


B

O programa sempre imprimirá 1000, pois apenas uma thread executa por vez.


C

O programa não compila, pois múltiplas threads não podem acessar a mesma variável.


D

O programa sempre imprimirá exatamente 2000, pois cada thread incrementa o contador mil vezes.


E

O programa pode imprimir um valor menor que 2000, devido a condições de corrida durante a execução concorrente.

A principal diferença entre processos e threads, em um sistema operacional, está no fato de que:


A

processos compartilham integralmente o mesmo espaço de endereçamento, enquanto threads possuem memória isolada.


B

threads de um mesmo processo tendem a compartilhar recursos, como espaço de memória, com menor custo de criação e comunicação.


C

processos não possuem contexto de execução próprio, diferentemente das threads.


D

threads executam apenas em sistemas monoprocessados, enquanto processos exigem múltiplos núcleos.

Analise as afirmativas abaixo sobre a programação concorrente em Java, segundo a obra de Deitel.


I. A interface Runnable exige a implementação do método run(), mas não fornece o método start().

II. Para iniciar a execução de um thread criado a partir da classe Thread, deve-se chamar o método run() diretamente no código principal.

III. O estado de um thread que está aguardando o processador para ser executado é chamado de RUNNABLE.

IV. O método sleep() da classe Thread é utilizado para encerrar permanentemente a execução de um thread de baixa prioridade.


Estão corretas apenas as afirmativas


A

I e II.


B

I e III.


C

II e IV.


D

III e IV.

Analise o seguinte programa escrito em linguagem C, executado em ambiente Linux e utilizando a biblioteca POSIX Threads (pthreads):


#include <stdio.h>

#include <pthread.h>


pthread_mutex_t m1 = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_t m2 = PTHREAD_MUTEX_INITIALIZER;


void* thread1(void* arg){

pthread_mutex_lock(&m1);

printf("Thread 1 bloqueou m1\n");


pthread_mutex_lock(&m2);

printf("Thread 1 bloqueou m2\n");


pthread_mutex_unlock(&m2);

pthread_mutex_unlock(&m1);

return NULL;

}


void* thread2(void* arg){

pthread_mutex_lock(&m2);

printf("Thread 2 bloqueou m2\n");


pthread_mutex_lock(&m1);

printf("Thread 2 bloqueou m1\n");


pthread_mutex_unlock(&m1);

pthread_mutex_unlock(&m2);

return NULL;

}


int main(){

pthread_t t1, t2;


pthread_create(&t1,NULL,thread1,NULL);

pthread_create(&t2,NULL,thread2,NULL);


pthread_join(t1,NULL);

pthread_join(t2,NULL);


return 0;

}


Considerando a execução concorrente das threads, assinale a alternativa correta.


A

O uso de pthread_mutex_lock impede automaticamente a ocorrência de deadlock.


B

O programa apresenta erro de compilação devido ao uso simultâneo de dois mutex.


C

O programa executará sempre na mesma ordem, primeiro thread1 e depois thread2.


D

O programa sempre executará corretamente, pois cada thread libera os mutex ao final.


E

O programa pode entrar em deadlock, caso cada thread adquira um mutex diferente e aguarde indefinidamente pelo outro.

Considere um sistema operacional com memória virtual paginada e, para esta questão, adote o modelo clássico de Translation Lookaside Buffer (TLB), no qual as entradas do TLB não são marcadas com o processo/espaço de endereçamento ao qual pertencem. Nesse cenário, a troca de contexto entre duas threads do mesmo processo tende, em geral, a ser menos custosa do que a troca entre dois processos distintos. Assinale a alternativa que explica corretamente, do ponto de vista da memória virtual, por que isso ocorre.


A

Na troca de contexto entre threads do mesmo processo, o contexto de memória virtual permanece o mesmo, pois elas compartilham o espaço de endereçamento. Já na troca entre processos distintos, o sistema precisa trocar esse contexto, fazendo com que as traduções antigas do TLB deixem de ser aproveitáveis e precisem ser invalidadas, o que eleva o custo dos acessos subsequentes até o reabastecimento do TLB.


B

Na troca de contexto entre threads do mesmo processo, os registradores de uso geral não precisam ser salvos nem restaurados, pois todas as threads de um processo compartilham o mesmo conjunto de registradores, eliminando esse overhead da operação de comutação.


C

A troca de contexto entre threads é mais barata porque o escalonador recalcula prioridades apenas para trocas entre processos, não entre threads; trocas de threads dispensam completamente qualquer reavaliação de fila de prontos.


D

Na troca de contexto entre threads do mesmo processo, o sistema operacional reutiliza a pilha de execução da thread anterior, evitando a alocação de nova pilha e reduzindo o tempo de comutação.


E

A troca de contexto entre processos exige que o sistema operacional envie sinais de interrupção a todos os processos em execução e aguarde suas confirmações antes de escalonar o próximo; threads do mesmo processo dispensam esse protocolo de sinalização.

Relacione os conceitos de multithreading às suas respectivas descrições.


Conceito

(1) Thread

(2) Mutex

(3) Deadlock

(4) Race Condition


Descrição


( ) Situação em que duas ou mais threads acessam e modificam dados compartilhados simultaneamente, podendo gerar resultados imprevisíveis.

( ) Unidade de execução leve dentro de um processo, capaz de executar tarefas concorrentemente com outras unidades de execução.

( ) Mecanismo de sincronização utilizado para garantir que apenas uma thread acesse uma seção crítica por vez.

( ) Situação em que duas ou mais threads ficam bloqueadas indefinidamente esperando por recursos que estão sendo mantidos umas pelas outras.


A sequência correta dessa associação é:


A

(1); (2); (4); (3).


B

(2); (1); (3); (4).


C

(2); (3); (1); (4).


D

(4); (1); (2); (3).

Preencha as lacunas abaixo, identificando as informações correspondentes às threads em um sistema operacional.


Threads são unidades de execução que ________ o espaço de endereçamento do processo ao qual pertencem, possuem ________ overhead de criação em comparação com processos e, em arquiteturas multicore, podem ________ em núcleos distintos quando implementadas como kernel threads.


A sequência de palavras que preenche corretamente as lacunas é:


A

duplicam / menor / alternar


B

compartilham / menor / executar em paralelo


C

duplicam / maior / executar em paralelo


D

compartilham / maior / alternar

Um analista de sistemas está projetando a aplicação web JustiçaÁgil. A JustiçaÁgil deve ser uma aplicação Java de alta performance, apta a processar um grande volume de requisições de usuários em tempo real. A fim de otimizar a utilização dos recursos do servidor, o analista decidiu implementar o paralelismo na JustiçaÁgil com o uso tanto de threads virtuais do Java quanto de threads de plataforma.


Sobre a implementação de paralelismo na JustiçaÁgil, é correto afirmar que:


A

os threads virtuais serão executados em um ambiente isolado, garantindo que falhas em um thread virtual não afetem o restante da aplicação;


B

cada thread virtual equivalerá a um thread de plataforma, resultando em um aumento linear no consumo de recursos à medida que o número de threads aumenta;


C

os threads virtuais compartilharão um thread de plataforma subjacente, permitindo que um único thread de plataforma esteja associado a milhares de threads virtuais;


D

o número de threads de plataforma disponíveis determinará o número máximo de threads virtuais que podem ser instanciadas, independentemente da carga de trabalho;


E

o número de threads virtuais disponíveis determinará o número máximo de threads de plataforma que podem ser instanciadas, independentemente da carga de trabalho.

Sobre os princípios de sistemas operacionais modernos, um fluxo de execução dentro de um processo, que compartilha os mesmos recursos desse processo e que permite que várias tarefas sejam realizadas ao mesmo tempo, é conhecido como:


A

Cache.


B

Schedule.


C

Kernel.


D

Stack.


E

Thread.

Em sistemas operacionais modernos que implementam multithreading, a eficiência na coordenação de processos depende da compreensão exata de quais recursos são compartilhados e quais são privativos. Tendo isso em vista, assinale a alternativa que apresenta corretamente a arquitetura de memória e contexto de threads pertencentes a um mesmo processo.


A

Cada thread possui sua própria tabela de páginas, garantindo o isolamento total de variáveis e dados globais.


B

O sistema aloca uma área de Heap exclusiva para cada thread, o que dispensa o uso de exclusão mútua.


C

As threads compartilham código e dados globais, mas mantêm pilhas, registradores e contadores de programa próprios.


D

Os descritores de arquivos abertos são privativos de cada thread, exigindo a passagem de mensagens entre elas.


E

O contexto de hardware, incluindo o contador de programa e os registradores, é compartilhado entre todas as threads.

No modelo de thread clássico, cada linha de execução de um mesmo processo possui seu próprio espaço isolado de endereçamento de memória, o que impede que uma modifique os dados da outra.


C

Certo


E

Errado

Preencha as lacunas abaixo.


As threads podem ser classificadas em dois tipos principais: threads de __________, que são gerenciadas pelo próprio programa, e threads de __________, que são suportadas e gerenciadas diretamente pelo sistema operacional.


A sequência de palavras que preenche corretamente as lacunas é:


A

execução / tempo real


B

software / CPU


C

usuário / kernel


D

processo / memória

Qual é a diferença principal entre um processo e uma thread?


A

Processos são mais rápidos que threads


B

Threads compartilham o mesmo espaço de memória, processos não


C

Processos podem ter múltiplas threads, mas threads não podem ter múltiplos processos


D

Threads são usadas apenas em sistemas operacionais de servidor

Uma prefeitura está desenvolvendo um sistema integrado de gestão pública que centraliza diversas funções administrativas. Para garantir a consistência dos logs de sistema, foi decidido implementar o padrão Singleton para a classe de gerenciamento de logs. Um dos desenvolvedores sugeriu a seguinte implementação em Java:

Imagem associada para resolução da questão

Em condições ideais, para garantir que apenas um thread possa executar o método getInstance por vez, evitando a criação de múltiplas instâncias em um ambiente multithread, e considerando que o desempenho não é a principal prioridade, é adequado


A

adicionar o modificador synchronized ao método getinstance para torná-lo thread-safe.


B

declarar o atributo instance como flexible para garantir a consistência em ambientes multithread.


C

implementar a inicialização precoce (lazy initialization), instanciando instance imediatamente após a declaração.


D

redefinir o construtor como público, garantindo assim que apenas uma instância seja criada a partir de chamadas externas.


E

adicionar um bloco try-catch ao método getinstance para lidar com a exceção MultithreadException.

Existem diversas tecnologias e conceitos fundamentais para o desenvolvimento moderno de sistemas, desde aplicativos móveis até soluções web e empresariais complexas, sendo um desses conceitos essenciais o de threads. Nesse sentido, assinale a alternativa que descreve corretamente a função de threads dentro de um programa de computador.


A

São maneiras pelas quais um processo ou uma tarefa de um programa é subdividido(a) em múltiplas tarefas menores, que podem ser executadas simultaneamente ou de forma concorrente.


B

São técnicas de segurança utilizadas para proteger programas contra falhas durante sua execução.


C

São partes de um programa que são executadas apenas uma vez e nunca podem ser reutilizadas em outros programas.


D

São processos que precisam ser manualmente reiniciados sempre que um erro ocorre durante sua execução.


E

São tipos de dispositivos de hardware que executam comandos específicos de um programa.

Durante uma aula prática de programação paralela, alunos da rede estadual estavam desenvolvendo um sistema com múltiplas threads. Em um dos testes, o sistema travou completamente: uma thread havia bloqueado um recurso e aguardava outro que estava sendo usado por uma segunda thread, que, por sua vez, aguardava a liberação do primeiro recurso. Nenhuma das duas conseguia continuar a execução, e o programa parou de responder.


Essa situação em que dois ou mais processos ficam indefinidamente bloqueados, cada um esperando que o outro libere um recurso, é denominada


A

starvation.


B

escalonamento.


C

swapping.


D

deadlock.


E

multiprogramação.

 
 
Gerar simulado