学习多线程 笔记

首先先来个一线的链接吧 毕竟我是看着他的博客写的

http://www.cnblogs.com/huangxincheng/archive/2012/03/14/2395279.html

一:Thread的使用

  Start 开始

  Stop 结束

  sleep  延迟 阻塞的指定时间

  Abort 相当于break 抛出的是  ThreadAbortException 异常。

  join 可以让并发行处理变成串行化      阻塞调用线程,直到某个线程终止时为止。

  Interrupt 如果终止工作线程,只能管到一次,工作线程的下一次sleep就管不到了,相当于一个 contine操作。 抛出的是 ThreadInterruptedException 异常。

  

  进入临界区
  Monitor.Enter(obj);
  、、、、、内容
  退出临界区
  Monitor.Exit(obj);

  Monitor.Wait和Monitor.Pulse

  首先这两个方法是成对出现,通常使用在Enter,Exit之间。

  Wait: 暂时的释放资源锁,然后该线程进入”等待队列“中,那么自然别的线程就能获取到资源锁。

   Pulse:  唤醒“等待队列”中的线程,那么当时被Wait的线程就重新获取到了锁。

ReaderWriterLock类

    先前也知道,Monitor实现的是在读写两种情况的临界区中只可以让一个线程访问,那么如果业务中存在”读取密集型“操作,就

好比数据库一样,读取的操作永远比写入的操作多。针对这种情况,我们使用Monitor的话很吃亏,不过没关系,ReadWriterLock

就很牛X,因为实现了”写入串行“,”读取并行“。

ReaderWriteLock中主要用3组方法:

<1>  AcquireWriterLock: 获取写入锁。

          ReleaseWriterLock:释放写入锁。

<2>  AcquireReaderLock: 获取读锁。

          ReleaseReaderLock:释放读锁。

<3>  UpgradeToWriterLock:将读锁转为写锁。

         DowngradeFromWriterLock:将写锁还原为读锁。

ReaderWriterLock rw = new System.Threading.ReaderWriterLock();
 //写锁
rw.AcquireWriterLock(TimeSpan.FromSeconds(30));
//释放锁
rw.ReleaseWriterLock();

//读锁
rw.AcquireReaderLock(TimeSpan.FromSeconds(30));
//释放锁
rw.ReleaseReaderLock();

今天整理“信号量”的相关知识,其实想想也蛮有趣的,锁,互斥,信号量都可以实现线程同步,在framework里面主要有三种。

<1>:ManualResetEvent

<2>:AutoResetEvent

<3>: Semaphore

一:ManualResetEvent

      该对象有两种信号量状态True和False,好奇的我们肯定想知道True和False有什么区别,稍后的例子见分晓,有三个方法值得学习一下。

1:WaitOne

     该方法用于阻塞线程,默认是无限期的阻塞,有时我们并不想这样,而是采取超时阻塞的方法,如果超时就放弃阻塞,这样也就避免了无限期

       等待的尴尬。

2:Set

     手动修改信号量为True,也就是恢复线程执行。

3:ReSet

     手动修改信号量为False,暂停线程执行。



二:AutoResetEvent

      在VS对象浏览器中,我们发现AutoResetEvent和ManualResetEvent都是继承于EventWaitHandle,所以基本功能是一样的,不过值得注意

的一个区别是WaitOne会改变信号量的值,比如说初始信号量为True,如果WaitOne超时信号量将自动变为False,而ManualResetEvent则不会。

三:Semaphore 

     这玩意是.net 4.0新增的,用于控制线程的访问数量,默认的构造函数为initialCount和maximumCount,表示默认设置的信号量个数和

最大信号量个数,其实说到底,里面是采用计数器来来分配信号量,当你WaitOne的时候,信号量自减,当Release的时候,信号量自增,然而

当信号量为0的时候,后续的线程就不能拿到WaitOne了,所以必须等待先前的线程通过Release来释放。

暂停学这个 

原文地址:https://www.cnblogs.com/lxyh/p/2714887.html