面试题:C#编码实现两个线程对数组变量分别加1减1,居然没有做出来

2023-10-31 13:09:49 浏览数 (1)

面试题:

请编写一段程序,已知变量(int[] i=new int[]{0}),创建两个线程,其中一个线程每隔一秒种对i[0]进行加1,另外一个线程没间隔一秒对i[0]进行减1,对i[0]进行加减时需要考虑到线程安全。

解答:

首先编写编写两个线程,每个线程一个循环对变量数组加减操作,在计算的时候需要加锁。代码如下:

代码语言:javascript复制
 private static object lockObj = new object();//定义锁
      private static object lockObj2 = new object();//定义锁
        static int[] i = new int[] { 0 };//数组
        public static void Main()
        {
        //开启两个线程
            Thread thread = new Thread(new ThreadStart(Threadaddition));
            thread.Start();
            Thread thread2 = new Thread(new ThreadStart(Threadsub));
            thread2.Start();

            Console.WriteLine(i[0]);
        }
        private static void Threadaddition()
        {
            try
            {
                while (true)
                {
                    lock(lockObj)//加锁
                    {
                    Thread.Sleep(1000);
                    i[0] = i[0]   1;
                    }
                }
            }
            catch (Exception ee)
            {
            }
        }
        private static void Threadsub()
        {
            try
            {
                while (true)
                {
                    lock (lockObj2)//加锁
                    {
                        Thread.Sleep(1000);
                        i[0] = i[0] - 1;
                    }
                }
            }
            catch (Exception ee)
            {
            }
           
        }

还可以用信号量实现,大家可以尝试一下。

欢迎欢迎大家评论指正,或写出自己的答案。

推荐阅读:

一个简单高效低内存的.NET操作Excel开源框架 - MiniExcel

推荐一个基于 .NET 开发的开源工作流项目

推荐一个使用 .NET 和 Angular 开发的在线任务管理工具

基于.NET的强大文件格式开源转换工具

字符串 --- 不可变性与驻留池

Dotnet工具箱:开源、免费的纯前端工具网站,带你探索10大工具分类和73个实时在线小工具

0 人点赞