操作系统里面讲多线程的时候经常提到多线程,用多线程的时候,往往会使用信号量。
1.互斥信号量(Mutex)
2.资源信号量(Semaphore)
两个信号量在是使用时候的语句分别为:
public Mutex mutex1; //互斥信号量的声明;
mutex1 = new Mutex(false); //互斥信号量初始定义为false;
mutex1.WaitOne(); //申请互斥资源,申请不到则一直wait,阻塞;
mutex1.ReleaseMutex(); //释放互斥资源,释放结束后会唤醒被阻塞的线程;
public Semaphore sema1; //资源信号量的声明;
sema1 = new Semaphore(x, y); /资源信号量初始值的定义,y为最大值,x为当前值,都是int类型;
sema1.WaitOne(); //申请资源,申请不到则一直wait,阻塞;
sema1.Release(); //释放资源,释放结束后会唤醒被阻塞的线程;
在实际写代码的时候也会用到waitone()函数的超时功能,返回值为布尔类型,比如waitone(30),是最多等待30毫秒,如果30毫秒后还申请不到资源,就会返回false,在30毫秒内如果申请到了资源的话,会返回true;也可以在使用是查看函数的定义,里面也会有对此函数的使用介绍。
还有一种信号量叫做事件信号量ManualResetEvent,使用这种信号量可以实现线程的暂停和继续功能,用法为:
public ManualResetEvent getNews = new ManualResetEvent(false);
getNews.WaitOne() //阻止当前线程,直到当前 System.Threading.WaitHandle 收到信号,如果当前实例收到信号,则返回 true;否则返回 false。
getNews.Set(); //设置事件信号量可以收到信号;
People.getNews.Reset(); //设置事件信号量不可以收到信号;