Como você faria / escrever este trabalho de casa? (teórico)
-
20-08-2019 - |
Pergunta
Eu não estou pedindo para alguém fazer esse dever de casa para mim, mas eu levá-la porque é uma introdução muito boa prática para C # e threading, mas ao mesmo tempo eu sinto que é talvez um pouco simples demais.
Esta é realmente a melhor maneira de enfiar ensinar? que conceitos de segmentação de chave são "perdidos" neste exercite, o que novos programadores que utilizam fios pela primeira vez provavelmente deixar de observar?
Eu tenho um monte de conhecimentos teóricos sobre segmentação, mas não tiveram de fazer um monte de-lo eu mesmo no passado, alguém tem quaisquer advertências para mim quando escrevê-lo?
Aqui está o link para a atribuição original
e aqui está o texto objetivos:
1) Criar um thread-safe genérico classe fila circular e criar uma GUI para usá-lo (ver secção seguinte). Nisso contexto, passe meios seguros de que cada operação (método) que muda o conteúdo da fila deve ser executado por apenas um thread por vez a fim de evitar a corrupção de dados. UMA fila circular está implementado como um matriz de tamanho fixo onde o início e no fim da fila são índices em a matriz. À medida que a fila enche-se, a início e no fim da fila irá deslocar a valores mais elevados como elementos são adicionados e, eventualmente, envolver em torno de o primeiro índice na matriz para reutilizar a memória. Esta classe também deve accionar uma excepção (especificado abaixo) para o chamador se a operação for inválido.
2) Criar uma interface gráfica para o controle dois threads em um produtor-consumidor moda. A GUI será capaz de começar e iniciar e parar tanto o produtor e fios e controle do consumo velocidade à qual eles modificam a GenericCircularQueue.
Solução
Leia esta:
- Por que são thread coleção de seguro tão difícil?
- A mais API utilizável para uma linha mutável recolha segura
O segundo link pode principalmente se por si própria.
Outras dicas
Leia sobre SyncLock ou monitor assumindo o Windows C #.
É uma maneira tão boa quanto qualquer outro para entender multi-threading, especialmente no dia de multi-núcleos.
Eu diria que este perde duas grandes coisas:
- Lotes de gravações, lê não pode obter o bloqueio e morrer de fome; Resultado: uma fila limitada como esta enche. Você precisa encontrar uma maneira de dar aos leitores uma prioridade mais alta para que eles possam drenar a fila.
- Escalabilidade --- você pode torná-lo thread-safe muito facilmente por apenas exigindo um bloqueio para ler ou escrever, e que vai trabalhar muito para um leitor / um escritor. No entanto, uma vez que você tem um grande número de produtores / consumidores, você vai ter um monte de contenção fio.