📅  最后修改于: 2023-12-03 14:39:45.231000             🧑  作者: Mango
在C#中,可以使用共享类来实现线程安全的共享数据。下面介绍共享类的概念和使用方法。
共享类是一种特殊的类,它可以用来存储多个线程使用的共享数据。共享类是线程安全的,因为它的属性和方法都是原子操作,即在执行期间不会被其他线程中断。
可以使用共享类来代替全局变量,避免并发访问问题。共享类中的数据可以被多个线程共享,但是每个线程只能访问自己定义的部分。
共享类可以使用C#的lock关键字来实现同步。例如,下面是一个共享类的定义:
public class SharedData
{
private object lockObject = new object();
private int data;
public void SetData(int value)
{
lock (lockObject)
{
data = value;
}
}
public int GetData()
{
lock (lockObject)
{
return data;
}
}
}
在这个示例中,lockObject是一个锁对象,用来保护共享数据的访问。SetData方法和GetData方法都使用了lock关键字来保证线程安全。
可以把共享类的实例作为参数传递给多个线程,每个线程都可以通过这个共享类实例来访问共享数据。例如:
var sharedData = new SharedData();
Task.Factory.StartNew(() =>
{
sharedData.SetData(1);
});
Task.Factory.StartNew(() =>
{
int result = sharedData.GetData();
Console.WriteLine(result);
});
在这个示例中,首先创建了一个SharedData实例,然后分别启动了两个线程,一个线程调用SetData方法设置共享数据的值,另一个线程调用GetData方法获取共享数据的值。
共享类是一种线程安全的共享数据结构,可以用来代替全局变量,避免并发访问问题。在使用共享类时,要注意使用lock关键字来保护共享数据的访问,确保线程安全。