Como fazer uma variável estática thread-safe

Eu tenho essa classe estática que contém uma variável estática (um int simples). Eu implementei umlock() noRun() método dos encadeamentos, para que nenhum outro encadeamento possa acessar essa classe simultaneamente, mas a variável ainda enlouquece, exibindo duplicatas, valores insanamente altos, etc.

Esta é a classe:

public static class ExplorationManager
{
    public static int Counter = 0;

    public static void ExplorerMaker(List<int[]> validPaths, List<string> myParents, string[,] myExplorationMap, List<int[]> myPositions)
    {
        foreach (var thread in validPaths.Select
        (path => new Explorer(myParents, path, myExplorationMap, myPositions)).
        Select(explorer => new Thread(explorer.Explore)))
            {
                thread.Name = "Thread of " + Counter + " generation";
                Counter++; 
                thread.Start();
    }
}

}

Existe uma maneira de tornar essa variável "mais" thread-safe?

questionAnswers(6)

yourAnswerToTheQuestion