What is the way to obtain a thread safe counter in C# with best possible performance?
This is as simple as it gets:
public static long GetNextValue()
I suggest you use .NET's built in interlock increment in the System.Threading library.
The following code will increment a long variable by reference and is completely thread safe:
Interlocked.Increment(ref myNum);
Source: http://msdn.microsoft.com/en-us/library/dd78zt0c.aspx