ucos 建立信号量OSSemCreate什么时候计数初值用1,什么时候用0?

建立信号量OSSemCreate(计数初值)我想问,计数初值什么时候为1,什么时候为0?

哥哥来解释给你听听吧,当 pend请求发出的时候信号量的值减1,当post的时候信号量的值加1,信号量的值0跟1分别是用来同步跟互斥的,什么是同步,什么是互斥呢。。。假设你把信号量的值设为0,有A,B连个任务,当A发出pend请求的时候它发现此事的信号量值为0就把它减1然后挂起等待,等待到什么时候呢?等待任务B执行post操作把信号量的值加1然后唤醒进程A,然后两个进程同步并发执行。。。通俗点解释就是任务A执行到某个地方的时候先停下来睡觉,等待任务B来叫醒它,然后两个任务一起并发运行,也就是几乎同时从那个点开始运行哈。。。
假设信号量的值是1,就是用来互斥的,A,B两个任务只能其中一个任务pend执行成功返回,此时信号量的值是0,另一个在pend请求的时候就必须把自己挂起等待刚刚那个请求成功的任务执行post操作才能唤醒继续执行。。。
打的字有点多了,好累。。。希望你能够理解!
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-03
请参考函数说明,初始值,可以取0到65535之间的任何值。===============OSSemCreate()===============该函数建立并初始化一个[inner]信号量[/inner],信号量的作用如下:* 允许一个任务和其他任务或者中断同步* 取得设备的使用权* 标志事件的发生函数原型:[inner]OS_EVENT[/inner] *[inner]OSSemCreate[/inner]([inner]INT16U[/inner] value);参数说明:value 参数是所建立的信号量的初始值,可以取0到65535之间的任何值。返回值:OSSemCreate() 函数返回指向分配给所建立的信号量的控制块的指针。如果没有可用的[inner]控制块[/inner],OSSemCreate() 函数返回空指针。 到USR嵌入式技术社区网站查看回答详情>>

ucos 建立信号量OSSemCreate什么时候计数初值用1,什么时候用0?
OSSemPost 和OSSemPend是成对出现的,在程序OSSemPost 尚未运行到的时候,在等待Sem的 OSSemPend是会把当前的任务挂起,直到另外一个任务的OSSemPost 运行完毕都得到Sem。但是可以通过改变OSSemCreate(x)里面的值x改变这种局面,当x不为0时,OSSemPend会马上得到Sem继续运行当前任务至结束,并将x的数值减一,...

ucos 建立信号量OSSemCreate什么时候计数初值用1,什么时候用0?
哥哥来解释给你听听吧,当 pend请求发出的时候信号量的值减1,当post的时候信号量的值加1,信号量的值0跟1分别是用来同步跟互斥的,什么是同步,什么是互斥呢。。。假设你把信号量的值设为0,有A,B连个任务,当A发出pend请求的时候它发现此事的信号量值为0就把它减1然后挂起等待,等待到什么时...

ucos 建立信号量OSSemCreate什么时候计数初值用1,什么时候用0
计数初值用0,用于任务间的通信,另一个任务运行过程中得到了结果然后发送信号量,就会将计数值+1,这个时候请求信号量的任务就能执行了。总的来说,计数初值大于0,用于共享资源。计数初值为0,用于任务间通信。当然也有其他情况。以上为个人理解。

相似回答