美文网首页
线程同步与线程池

线程同步与线程池

作者: ottox | 来源:发表于2018-11-15 17:49 被阅读0次

    线程的优先级

    五个优先级,由高到低分别是:Highest、AboveNormal、�Normal(默认)、BelowNormal和Lowest
    可以使用下面的方法为其赋予较高的优先级:
    Thread t = new Thread(MethodName);
    t.priority = ThreadPriority.AboveNormal;
    通过设置线程的优先级可以改变线程的执行顺序,所设置的优先级仅仅适用于这些线程所属的进程。
    注意:
    当把某线程的优先级设置为Highest时,系统正在运行的其他线程都会终止,所以使用这个优先级别时要特别小心。

    线程同步

    指多个线程之间存在先后执行顺序的关联关系。

    哪些资源需要同步

    • 系统资源(如通信端口)
    • 多个进程所共享的资源(如文件句柄)
    • 由多个线程访问的单个应用程序域的资源(如全局、静态和实例字段)

    为什么要同步

    当两个线程t1和t2有相同的优先级,并且同时在系统上运行时,如果先把时间片分给t1使用,它在结构s1中(该结构中有多个变量)写入某些值,但如果在时间片用完时它仍没有完成写入,这时由于时间片已经分给t2使用,而t2又恰好要尝试读取该结构的值,此时读出的就不是正确的值。这种情况下,如果使用同步仅允许一个线程使用s1,在该线程完成对s1的写入工作后再让t2读取这个结构值,就可以避免出现此类错误。

    解决方法:
    System.Threading命名空间提供了多个用于同步线程的类这些类包括Mutex、Monitor、Interlocked和AutoResetEvent。
    在实际应用中经常使用lock语句完成线程同步。
    该语句简化了编程的复杂性,使程序看起来既清晰又简洁

    lock语句

    lock语句的功能

    lock语句可以有效地实现同步,即将代码段(语句块)标记为临界区。它能确保当一个线程位于代码的临界区(可以理解为一段代码)时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码段,则它将一直等待(即被阻塞),直到锁定的对象被释放以后才能进入临界区。

    lock语句的用法

    首先利用lock语句锁定某一个对象,然后执行代码段中的语句,等代码段中的语句执行完毕后,再释放该对象。
    private Object obj = new Object();
    ……
    lock(obj)
    {
    //临界区中的代码
    }

    使用lock语句应注意的问题

    • 锁定的对象名(上面代码中的obj)一般声明为Object类型,不要将其声明为值类型。
    • 锁定的对象名不能将其声明为public,只能为private
    • 临界区中的代码一般不宜太多。

    多线程随机取款

    //将lock (lockedObj)这句注释掉,看看会发生什么情况
                lock (lockedObj)
                {
                    if (balance >= amount)
                    {
                        string str = Thread.CurrentThread.Name + "取款---";
                        str+= string.Format("取款前余额:{0,-6}取款:{1,-6}", balance, amount);
                        balance = balance - amount;
                        str += "取款后余额:" + balance;
                        form1.AddListBoxItem(str);
                        return amount;
                    }
                    else
                    {
                        return 0;
                    }
                }
    

    相关文章

      网友评论

          本文标题:线程同步与线程池

          本文链接:https://www.haomeiwen.com/subject/dlgyfqtx.html