C# 多线程学习系列三:线程优先级、线程同步以及向线程传递参数

本文深入探讨C#多线程,涉及线程优先级的设置及其潜在风险,线程同步的重要性及解决竞争条件的方法,并通过实例详细解释如何向线程传递参数,包括使用lambda表达式的闭包特性。
摘要由CSDN通过智能技术生成

线程优先级

        在使用线程的时候,我们经常会见到线程优先级的问题,那么什么是线程优先级呢,线程优先级决定了该线程可占用多少的CPU时间。在C#程序中,可以对线程设定五个不同的优先级,从高到低依次是Highest、AboveNormal、Normal、BelowNormal和Lowest,在创建线程时,如果不指定其优先级,则系统默认为Normal。假如想让一些重要的线程优先执行,可以使用下面的方法为其赋予较高的优先级。

<span style="font-size:18px;">Thread t = new Thread(new ThreadStart(thread_method));
t.priority = ThreadPriority.AboveNormal;</span>

注意,当把某线程的优先级设为Highest时,系统上正在运行的其他线程都会终止,所以使用这个优先级是要特别小心。

线程同步

        使用线程的时候会碰到一个非常经典的问题,那就是线程同步所谓同步,是指多个线程之间存在先后执行顺序的关联关系。如果一个线程必须在另一个线程完成某个工作后才能执行,则必须考虑如何让其保持同步,以确保在系统运行多个线程而不会出现逻辑错误。比如下面的例子是多线程问题中比较经典的售票问题:

<span style="font-size:18px;">namespace TestThread
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Starting...");
            Thread thread1 = new Thread(run);
            Thread thread2 = new Thread(run);
            Thread thread3 = new Thread(run);
            thread1.Start();
            thread2.Start();
            thread3.Start();
            Console.ReadKey();
        }
        private static int count = 10;//火车票的数量  
        public static void run()
        {
            for (int i = 0; i < 100; i++)
            {
                if (count > 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值