Mapas Go falham no teste de concorrência

Mohsen:

Quando executo o seguinte código:

import (
"log"
"sync"
"testing"
"time"
)
func TestConcurrency(t *testing.T) {
var mutex sync.RWMutex
dictionary := make(map[interface{}]interface{})
go func() {
    var value interface{}
    for {
        go func() {
            mutex.Lock()
            dictionary["Key"] = ""
            mutex.Unlock()
        }()

        go func() {
            mutex.RLock()
            value = dictionary["Key"]
            mutex.RUnlock()
        }()

    }
    log.Println(value)
}()
}

usando:

go test -race fileName.go

Isso resulta em:

Found 1 data race(s)

Como posso resolver isso?

Tenho muitas gravações e leituras simultâneas.

JimB:

Se você olhar o erro apresentado pelo detector de corrida, verá que ele relatou gravações simultâneas na value = dictionary["Key"]linha, o que significa que a corrida detectada está ativada value, não dictionary.

Você está acessando simultaneamente 2 variáveis dictionarye value. Você não pode usar o bloqueio de leitura para proteger leituras no mapa e gravações na valuevariável. Você precisa de um segundo mutex ou precisa sempre usar mutex.Lockpara serializar o acesso a ambas as variáveis.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Mapas Go falham no teste de concorrência

Go: Concorrência e ordem de prioridade

Go: Concorrência e ordem de prioridade

Como executar alguns conjuntos de teste com concorrência e resto sem concorrência usando TestCafe?

Teste de equivalência de mapas em Go com o mesmo conteúdo, mas o teste falhou

Os casos de teste falham em satisfazer

Substituição de valores que falham em um teste de correspondência usando a biblioteca regex do Python

Os casos de teste falham na afirmação nula

Função de teste Go com referência de ponteiro

Concorrência de estresse de soquete Python

Controle de Concorrência Distribuído

Concorrência de leitura e gravação

Como obtenho um relatório de teste quando meus testes de unidade Jest falham no Docker?

Componentes de exemplo de teste angular falham ao carregar modelos no karma

3 mapas de variáveis em Go

Mapas de Go sob o capô

Usando um canal de mapas em go

O mapa de calor regular funciona, mas os mapas de calor da fábrica falham em Plotly

Como ver o conjunto completo de parâmetros que falham em um teste parametrizado no IntelliJ?

Os métodos de teste falham ao usar o Storage. Iluminar \ Http \ Testing \ imagepng () no Laravel

Teste de Karma + Jasmine para um SPA Angular falham aleatoriamente no AfterAll

Os casos de teste do WireMock sempre falham ao chamar um undefined

Concorrência de integração de Spring de ServiceActivators

Concorrência Java com objetos armazenados no banco de dados

Concorrência na prática Erro de buffer circular?

Concorrência e estruturas de dados simultâneas

Concorrência de assinatura do Azure Service Bus Topic

EF CORE Concorrência otimista sem carimbo de data / hora

Javax Transformer falha em ambiente de alta concorrência