博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 多线程程序隐患
阅读量:6716 次
发布时间:2019-06-25

本文共 1275 字,大约阅读时间需要 4 分钟。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;//线程同步与多线程程序中的隐患namespace Multithreading_hazard{    class Program    {        private static int stickets = 100;        static void Main(string[] args)        {            Thread thread1 = new Thread(SaleTicketThread1);            Thread thread2 = new Thread(SaleTicketThread2);            thread1.Start();            thread2.Start();            Thread.Sleep(4000);        }        private static void SaleTicketThread1()        {            while (true)            {                if (stickets>0)                {                    Console.WriteLine("线程一出票{0}:", stickets--);                }                else                {                    break;                }            }        }        private static void SaleTicketThread2()        {            while (true)            {                if (stickets > 0)                {                    Console.WriteLine("线程二出票{0}:", stickets--);                }                else                {                    break;                }            }        }    }}

因为两个线程访问了同一个静态变量stickets,线程出票的顺序发生了变化,将会引起数据出现错误.

为了避免这种情况的发生,保证同一时间类只有一个线程访问共享资源;

使用:线程同步:

转载于:https://www.cnblogs.com/lbonet/p/7298603.html

你可能感兴趣的文章
impulse
查看>>
Deep Learning 教程翻译
查看>>
贪心算法
查看>>
SDL示例一:实现七段数码管的显示
查看>>
Hive权限之审计
查看>>
Redis的安装与使用
查看>>
谈谈站桩
查看>>
容器、应用服务器和web服务器的区别
查看>>
分析统计<第三篇>
查看>>
javascript--- HTML DOM
查看>>
Exactly-once Spark Streaming from Apache Kafka
查看>>
哎,系统分析师下午没过
查看>>
c++opencv项目移植到Android(Mat—》IplImage*)
查看>>
嵌入式linux------SDL移植(am335x下显示yuv420)
查看>>
当vcenter是linux版本的时候Sysprep存放路径
查看>>
代码管理(五)git 删除分支
查看>>
[学习笔记]Spring依赖注入
查看>>
网络虚拟化(SDN,NFV..)和企业骨干网的演化
查看>>
怎么确保站点的可用性
查看>>
我的第一个android应用——装逼神器《微博尾》
查看>>