操作系统信号量(C#语言代码)

操作系统里面讲多线程的时候经常提到多线程,用多线程的时候,往往会使用信号量。

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();  //设置事件信号量不可以收到信号;

猜你喜欢

转载自blog.csdn.net/kiss__soul/article/details/79205512