C++事件和互斥使用的小心得

来源:互联网 发布:打电话自动录音软件 编辑:程序博客网 时间:2024/05/16 14:03

写过汇编,写过C语言,现在又开始了C++/MFC,有人说什么是操作系统,那么我想我的回答就是稳定的管理输入和输出设备的程序吧。对于编程人员而言,我想我的回答就是稳定的调度各个任务和任务间的通信。当然像window这样的牛的操作系统肯定不是我这样片面的回答就能概述的,也只能说我理解的它的冰山一角吧

任务间的通信是必不可少的,它的作用就是能传递数据,同时能保证线程同步(说白了就是公共资源的安全性)。这次作为新手的我接触了事件和互斥,其实我现在还不明白他们的机制,但是我想也不难,我看过ucos的源代码,虽然不能媲美windows,但是好像这部分的机制差不多,操作系统的难点是任务的调度,如果任务的调度搞定了,其实这些互斥啊,事件啊,信号量啊都是任务的参数而已。

好吧,现在说说两者的使用:

我是拿事件当做互斥来使用了,发现了要比互斥好用。

事件和互斥都是调用wait来等待信号,没有则挂起任务或者等待返回,而如果是互斥事件,当你wait拿到信号后(返回0),那么如果别的地方不set,那么当你再次调用wait的时候,此时wait返回的是没有信号(0x102),这样就很爽了,如果你是定时调用wait,那么不set,再次调用即不会执行wait后面的程序,说白了不会重复操作,比如你要问别人一件事情,别人还没有回答呢,你再次调用wait的时间到了,而没有回答也就没有set过,那么就不会再问别人,这样别人就不会被你问死。

他妈的互斥则不一样了,你问别人事情,只要别的任务又没有占用互斥信号,时间到后你就又要问别人,你他妈这样迟早会把别人给问死的。

所以互斥就是,只要互斥信号不被别的任务占用,那么wait返回的结果就永远是有信号,而且更可笑的是wait的次数需要和release的次数等价,比如你10次wait,而只调用了一次release,那么这个任务还是不能真正的释放信号,别的任务还是不能等到。其实还是机制的问题,很多通信机制有一般都是两重点,一个是任务的等待,一个是计数,他总是统计哪个任务被此信号挂起,当信号释放后就会执行响应被挂起的那些任务。

好吧,可能写的不是很清晰,读了一遍,反正我能看明白什么意思就哦了!

0 0
原创粉丝点击