Programação orientada a objetos em C# oferece muitas classes de operações amigáveis para o usuário, agora este StringDictionary é uma coleção de classes que se especializam em armazenar strings como chaves e valores, o significado dessa classe é: C# sabe que string no tipo de valor é bastante usada, outros tipos de valor também podem ser convertidos em tipos de string correspondentes, esse é o significado desta coleção, mas você ainda pode usar outros objetos de coleção para substituí-la, mas preste atenção a um ponto, Se for armazenamento em string, isso pode reduzir a perda de memória e o tempo necessário para rodar o programa
O SyncRoot pode ser usado para sincronizar o acesso ao StringDictionary
Para ser direto, é o conceito de bloqueio, vamos escrever um programa para testá-lo:
O código é o seguinte:
Temos dois threads ao mesmo tempo para adicionar dados ao dicionário StringDictionary,
A diferença de tempo de execução entre a primeira e a segunda thread é de um segundo, para ampliar a diferença de tempo e evitar que a execução seja rápida demais.
Você pode ver que as threads foram para os dois métodos, e ao adicionar o segundo dado, eles ficaram esperando o primeiro dado ser adicionado antes de adicionar o segundo, e o tempo de adição é muito rápido.
Abaixo, vamos escrevê-la de uma forma diferente para facilitar a compreensão:
3 threads são abertos, os dados são adicionados, e os 3 threads são executados quase ao mesmo tempo, mas quando os dados são adicionados, cada um está com 10 segundos de intervalo.
Resumindo, ao acessar com múltiplas threads, podemos usar o SyncRoot para garantir a segurança das threads
|