4259|3

260

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

有关信号量释放和申请的问题 [复制链接]

/*Event Pend*/
u16_t OSEventPend(u8_t rTaskPrio)
{
    u16_t rTaskEvent;
    rTaskEvent = OSTCB[rTaskPrio].rEvent;
    OSTCB[rTaskPrio].rEvent &= ~rTaskEvent;
    return(rTaskEvent);
}

/*Post event*/
void OSEventPost(u8_t rTaskPrio,u16_t rTaskEvent)
{
    OSTCB[rTaskPrio].rEvent |= (1< }


以上代码是网上针对51单片机上的小型RTOS的摘取的,我也跑过,可以运行的,不过没有深入,于是看了看,这两段代码的大概意思是事件的释放和申请,不过还是有些不理解啊。。请大侠们指点啊!谢谢!

最新回复

信号量可以分为几类:   ? 二进制信号量(binary semaphore):只允许信号量取0或1值,其同时只能被一个线程获取。   ? 整型信号量(integer semaphore):信号量取值是整数,它可以被多个线程同时获得,直到信号量的值变为0。   ? 记录型信号量(record semaphore):每个信号量s除一个整数值value(计数)外,还有一个等待队列List,其中是阻塞在该信号量的各个线程的标识。当信号量被释放一个,值被加一后,系统自动从等待队列中唤醒一个等待中的线程,让其获得信号量,同时信号量再减一。   信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。   计数器计算的结果是允许访问共享资源的通行证。因此,为了访问共享资源,线程必须从信号量得到通行证, 如果该信号量的计数大于0,则此线程获得一个通行证,这将导致信号量的计数递减,否则,此线程将阻塞直到获得一个通行证为止。当此线程不再需要访问共享资源时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。    详情 回复 发表于 2014-1-22 13:02
点赞 关注

回复
举报

35

帖子

7

TA的资源

一粒金砂(中级)

沙发
 

Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
Mark一下啊 !
 
个人签名
 

回复

1944

帖子

32

TA的资源

纯净的硅(高级)

板凳
 
信号量对象对线程的同步方式与前面几种方法不同,信号允许多个线程同时使用共享资源 ,这与操作系统中的PV操作相同。它指出了同时访问共享 资源的线程 最大数目。它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目。在用CreateSemaphore()创建信号量 时即要同时指出允许的最大资源计数和当前可用资源计数。一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数 就会减1,只要当前可用资源计数是大于0的,就可以发出信号量信号。但是当前可用计数减小到0时则说明当前占用资源的线程数已经达到了所允许的最大数目, 不能在允许其他线程的进入,此时的信号量信号将无法发出。线程在处理完共享资源后,应在离开的同时通过ReleaseSemaphore()函数将当前可 用资源计数加1。在任何时候当前可用资源计数决不可能大于最大资源计数。
PV操作及信号量的概念都是由荷兰科学家E.W.Dijkstra提出的。信号量S是一个整数,S大于等于零时代表可供并发进程使用的资源实体数,但S小于零时则表示正在等待使用共享资源的进程数。
P操作 申请资源:
     (1)S减1;
     (2)若S减1后仍大于等于零,则进程继续执行;
     (3)若S减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转入进程调度。
   V操作 释放资源:
     (1)S加1;
     (2)若相加结果大于零,则进程继续执行;
     (3)若相加结果小于等于零,则从该信号的等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度。
   
     信号量包含的几个操作原语:
     CreateSemaphore() 创建一个信号量
     OpenSemaphore() 打开一个信号量
     ReleaseSemaphore() 释放信号量
     WaitForSingleObject() 等待信号量
 
 
 

回复

1944

帖子

32

TA的资源

纯净的硅(高级)

4
 
信号量可以分为几类:  
? 二进制信号量(binary semaphore):只允许信号量取0或1值,其同时只能被一个线程获取。  

? 整型信号量(integer semaphore):信号量取值是整数,它可以被多个线程同时获得,直到信号量的值变为0。  

? 记录型信号量(record semaphore):每个信号量s除一个整数值value(计数)外,还有一个等待队列List,其中是阻塞在该信号量的各个线程的标识。当信号量被释放一个,值被加一后,系统自动从等待队列中唤醒一个等待中的线程,让其获得信号量,同时信号量再减一。  

信号量通过一个计数器控制对共享资源的访问,信号量的值是一个非负整数,所有通过它的线程都会将该整数减一。如果计数器大于0,则访问被允许,计数器减1;如果为0,则访问被禁止,所有试图通过它的线程都将处于等待状态。  

计数器计算的结果是允许访问共享资源的通行证。因此,为了访问共享资源,线程必须从信号量得到通行证, 如果该信号量的计数大于0,则此线程获得一个通行证,这将导致信号量的计数递减,否则,此线程将阻塞直到获得一个通行证为止。当此线程不再需要访问共享资源时,它释放该通行证,这导致信号量的计数递增,如果另一个线程等待通行证,则那个线程将在那时获得通行证。  
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表