B_QuRT_User_Guide(16)
10 All-signals
线程根据一个或多个内部事件的发生,使用所有信号来同步其执行。所有信号被存储在共享对象中,支持以下操作。
如果一个或多个信号被设置在All-signal对象中,而一个线程正在All-signal对象上等待该特定信号集的设置,那么该线程就被唤醒了。如果被唤醒的线程比当前线程有更高的优先级,那么就会发生上下文切换。
与任意信号不同,all-signals在再次等待信号之前不需要显式地清除all-signal对象中的任何设定信号–清除工作由等待操作自动完成。
一个all-signal对象包含32个信号,这些信号在一个32位的值中被表示为0-31位。位值0表示信号被设置,1表示信号被清除(这与任意信号的定义正好相反)。
注意:在任何时候,最多只有一个线程可以在一个全信号对象上等待。
因为信号的清除是由等待操作完成的,所以没有为全信号定义清除操作。
所有信号服务可以通过以下QuRT函数访问。- qurt_allsignal_destroy()
- qurt_allsignal_get()
- qurt_allsignal_init()
- qurt_allsignal_set() - qurt_allsignal_wait() - 数据类型
10.1 qurt_allsignal_destroy()
10.1.1 Function Documentation
10.1.1.1 void qurt_allsignal_destroy ( qurt_allsignal_t ∗ signal )
销毁指定的所有信号对象。
注意:当所有的信号对象不再被使用时,必须将其销毁。如果不这样做会导致QuRT内核的资源泄漏。
所有信号对象不能在仍在使用时被销毁。如果发生这种情况,QuRT的行为将无法定义。
相关数据类型
qurt_allsignal_t
参数
返回值
None.
依赖关系
None.
10.2 qurt_allsignal_get()
10.2.1 Function Documentation
10.2.1.1 sstatic unsigned int qurt_allsignal_get ( qurt_allsignal_t ∗ signal )
从All-signal对象中获取信号值。
返回指定的all-signal对象的当前信号值。
相关数据类型
qurt_allsignal_t
参数
返回值
None.
依赖关系
None.
10.3 qurt_allsignal_init()
10.3.1 Function Documentation
10.3.1.1 void qurt_allsignal_init ( qurt_allsignal_t ∗ signal )
初始化一个所有信号对象。
所有信号对象最初被清空。
相关数据类型
qurt_allsignal_t
参数
返回值
None.
依赖关系
None.
10.4 qurt_allsignal_set()
10.4.1 Function Documentation
10.4.1.1 void qurt_allsignal_set ( qurt_allsignal_t ∗ signal, unsigned int mask )
在指定的全信号对象中设置信号。
信号在32位掩码值中表示为第0到31位。掩码位值为1表示必须设置信号,0表示不设置信号。
相关数据类型
qurt_allsignal_t
参数
返回值
None.
依赖关系
None.
10.5 qurt_allsignal_wait()
10.5.1 Function Documentation
10.5.1.1 void qurt_allsignal_wait ( qurt_allsignal_t ∗ signal, unsigned int mask )
在所有信号对象上等待。
暂停当前线程,直到所有指定的信号被设置。信号在32位掩码值中表示为第0到31位。掩码位值为1表示必须等待一个信号,0表示不需要等待。
如果一个信号在一个全信号对象中被设置,而一个线程正在全信号对象上等待该信号,那么该线程就会被唤醒。如果被唤醒的线程比当前线程有更高的优先级,那么就会发生上下文切换。
与任意信号不同,all-signals在再次等待信号之前不需要显式地清除all-signal对象中的任何设定信号–清除工作由等待操作自动完成。
注意:在任何时候,最多只有一个线程可以在一个all-signal对象上等待。因为信号的清除是由wait操作完成的,所以没有为all-signals定义清除操作。
相关数据类型
qurt_allsignal_t
参数
返回值
None.
依赖关系
None.
10.6 Data Types
本节描述了全信号服务的数据类型。
- 所有信号在QuRT中被表示为qurt_allsignal_t类型的对象。
10.6.1 Data Structure Documentation
10.6.1.1 union qurt_allsignal_t
qurt_signal_t取代了qurt_allsignal_t。添加这个类型定义是为了向后兼容。