我正在尝试编写一个多线程程序,其中每个线程都会使用一个计数器,然后递增它。
例如:
lock(this)
{
counter++;
Console.WriteLine(counter);
}
我知道对于增量我可以使用:
System.Threading.Interlocked.Increment(counter);
但是对于递增和对计数器做某事的锁定呢?
谢谢!
最佳答案
这样做是可以的:
线程 A:
var incremented_counter = Interlocked.Increment(ref counter);
Console.WriteLine(incremented_counter);
线程 B:
Interlocked.Increment(ref counter);
这样做是可以的:
线程 A:
lock (the_lock) {
++counter;
Console.WriteLine(counter);
}
线程 B:
lock (the_lock) {
++counter;
}
这样做没问题,但多余:
线程 A:
lock (the_lock) {
var incremented_counter = Interlocked.Increment(ref counter);
Console.WriteLine(incremented_counter);
}
线程 B:
lock (the_lock) {
Interlocked.Increment(ref counter);
}
但是这样做不行 OK:
线程 A:
Interlocked.Increment(ref counter);
Console.WriteLine(counter);
线程 B:
Interlocked.Increment(ref counter);
它也不是这样做的:
线程 A:
lock (the_lock) {
++counter;
Console.WriteLine(counter);
}
线程 B:
Interlocked.Increment(ref counter);
它也不是这样做的:
线程 A:
var incremented_counter = Interlocked.Increment(ref counter);
Console.WriteLine(incremented_counter);
线程 B:
lock (the_lock) {
++counter;
}
(顺便说一句,don't use lock
on this
.)
关于c# - 使用联锁用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9517951/