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

线程同步与线程池

作者: 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;
                }
            }

相关文章

  • 线程同步与线程池

    线程的优先级 五个优先级,由高到低分别是:Highest、AboveNormal、�Normal(默认)、Belo...

  • 看完这篇线程、线程锁与线程池讲解,面试随便问!

    前文: 单线程——多线程的开启——线程锁——线程同步工具——手写连接池——连接池工具类。 一、线程 1.线程的概念...

  • GCD中的串行,并行,同步,异步详解

    gcd中的串行,并行,同步,异步详解 1、gcd中同步与异步的区别: gcd中的线程是由一个线程池来管理的,这个池...

  • python之多线程与多进程入门

    python之多线程与多进程 关键词: GIL锁,IO繁忙,线程安全,线程同步,进程池,进程通信,队列 GIL锁;...

  • BIO NIO AIO

    BIO: 同步阻塞 BIO是来一个连接建立一个线程,可以使用线程池改进性能 线程池案例 NIO:同步非阻塞 NIO...

  • 线程池和多线程同步的一些问题

    关于线程池和多线程同步的一点问题记录 1.线程池 newScheduledThreadPool可以设定预定工作时间...

  • 线程池与Threadlocal

    线程池与Threadlocal 线程池: 线程池是为了使线程能够得到循环的利用,线程池里面养着一些线程,有任务需要...

  • Python并发编程——多线程

    摘要:Python,多线程,线程同步,线程池,GIL 线程概述 当一个进程里面只有一个线程时,叫做单线程,超过一个...

  • 反射、注解与依赖注入总结

    上一篇【线程、多线程与线程池总结】中主要记录线程、多线程相关概念,侧重于线程的Future使用与线程池的操作;同样...

  • 多线程编程

    摘要 线程概念,线程与进程的区别与联系学会线程控制,线程创建,线程终止,线程等待了解线程分离与线程安全学会线程同步...

网友评论

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

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