0
点赞
收藏
分享

微信扫一扫

线程安全(一)

什么是线程安全

当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的
同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象时线程安全的。

在C#中,线程安全是指多个线程对共享资源的并发访问不会引发任何数据竞争、内存不一致或其他线程相关的错误。线程安全是重要的,因为在多线程环境下,多个线程同时访问和修改共享资源可能会导致不可预料的结果和错误。 常用的实现线程安全的方式为使用锁; 使用LOCK关键字来创建互斥锁,确保在某一时刻只有一个线程可以访问临界区代码。线程锁可以用于保护多个线程对共享自愿的并发访问,确保同一时间只有一个线程可以访问资源,避免数据竞争和冲突。


class Program
{
    static object lockObject = new object();
    
    static void Main(string[] args)
    {
        // 创建多个线程并启动
        for (int i = 0; i < 5; i++)
        {
            Thread thread = new Thread(DoWork);
            thread.Start();
        }

        Console.ReadLine();
    }

    static void DoWork()
    {
        // 使用lock关键字获取线程锁
        lock (lockObject)
        {
            // 需要进行同步操作的代码
            Console.WriteLine("开始执行任务");

            // 模拟耗时操作
            Thread.Sleep(1000);

            Console.WriteLine("任务执行完毕");
        }
    }
}

在上面的示例中,lockObject被用作锁对象。多个线程同时执行DoWork方法时,只有一个线程能够进入到lock代码块中并执行同步操作,其他线程将被阻塞,直到该线程释放锁。

注意,在使用lock关键字时,需要确保对共享资源的访问都位于lock代码块内部,以保证线程安全性。

举报

相关推荐

0 条评论