Csharp如果同一个变量被多线程访问如何处理举例说明
时间: 2023-06-02 09:06:20 浏览: 108
如果同一个变量被多个线程同时访问,可能会出现竞态条件(Race Condition)的问题,导致程序运行出错或结果不正确。为了解决这个问题,可以使用锁(Lock)或互斥量(Mutex)等同步机制来保证多线程对变量的访问互斥,确保同一时间只有一个线程可以访问该变量,从而避免竞态条件问题的发生。
例如,下面的代码展示了使用Lock来实现对共享变量的访问互斥的示例:
```
class Program {
static int count = 0;
static readonly object lockObj = new object();
static void Main(string[] args) {
var threads = new List<Thread>();
for (int i = 0; i < 10; i++) {
var t = new Thread(() => {
for (int j = 0; j < 10000; j++) {
lock (lockObj) {
count++;
}
}
});
threads.Add(t);
t.Start();
}
foreach (var t in threads) {
t.Join();
}
Console.WriteLine("Count: " + count);
}
}
```
在上面的示例中,使用lock关键字来保证了count变量的访问互斥,每次只有一个线程可以访问该变量。这样做可以确保对变量的访问不会出现竞态条件问题,避免了程序出错或结果不正确的情况。
阅读全文