ACE之Task框架

简介

其提供了并发处理事件的能力

结构

0..1
*
ACE_Task_Base
- ACE_Thread_Manager *thr_mgr_
- size_t thr_count_
+int svc(void)
+static ACE_THR_FUNC_RETURN svc_run(void *)
ACE_Task<SYNCH, TIME_POLICY>
-ACE_Message_Queue<ACE_SYNCH_USE, TIME_POLICY> *msg_queue_
«interface»
ACE_Message_Queue_Base
# int state_
ACE_Message_Queue<ACE_SYNCH_USE, TIME_POLICY>
ACE_Service_Object
ACE_Thread_Manager

ACE_Task_Base :Task框架的基类,提供了线程入口函数svc_run,内部调用svc虚函数

  • activate:创建线程执行任务svc_run
  • svc_run:向线程池中注册线程退出时的处理函数,执行任务的svc处理函数,调用任务的cleanup清理函数,将线程退出处理函数中列表中删除

ACE_Task:模板类,提供了同步策略。一个线程对应一个Task
ACE_Thread_Manager

  • spawn_n:带有task的参数时,表示创建的线程执行task,同时创建ACE_Thread_Descriptor,填充参数task_,添加到thr_list_
  • ACE_Task_Base *task():返回当前执行线程的ACE_Task
  • int wait_task (ACE_Task_Base *task):等待执行task的所有线程结束
  • int suspend_task (ACE_Task_Base *task):挂起执行task的所有线程,如果挂起失败,则将线程添加到thr_to_be_removed_
  • int resume_task (ACE_Task_Base *task):恢复挂起的task的所有线程
  • int kill_task (ACE_Task_Base *task, int signum):向执行task的所有线程发送signum信号
  • int cancel_task (ACE_Task_Base *task, int async_cancel = 0):取消执行task的所有线程
  • int num_threads_in_task (ACE_Task_Base *task):返回执行task的线程数
  • ssize_t task_list (int grp_id,ACE_Task_Base *task_list[],size_t n):返回线程组id为grp_id的任务列表,最多返回n个
  • ssize_t thread_list (ACE_Task_Base *task,ACE_thread_t thread_list[],size_t n):返回执行任务为task的线程id列表,最多返回n个
  • ssize_t hthread_list (ACE_Task_Base *task,ACE_hthread_t hthread_list[],size_t n):返回执行任务为task的线程列表,最多返回n个
  • ssize_t task_all_list (ACE_Task_Base *task_list[],size_t n):返回线程池管理的所有的task列表,最多返回n个
  • int set_grp (ACE_Task_Base *task, int grp_id):设置执行task的线程的线程组id
  • int get_grp (ACE_Task_Base *task, int &grp_id):获取执行task的线程的线程组id

ACE_Message_Queue_Base:

  • int state_:表示消息队列的状态,可能值有ACTIVATED, DEACTIVATED和PULSED。ACTIVATED状态可以作入队出队操作,DEACTIVATED不可以作入队出队操作

ACE_Message_Queue

ACE_Message_Queue:通过队列实现了half sync/half async

«interface»
ACE_Notification_Strategy
ACE_Message_Queue<ACE_SYNCH_USE, TIME_POLICY>
# ACE_Notification_Strategy *notification_strategy_
# ACE::Monitor_Control::Size_Monitor *monitor_
ACE_Message_Queue_Iterator<ACE_SYNCH_USE, TIME_POLICY>
-ACE_Message_Queue<ACE_SYNCH_USE, TIME_POLICY> &queue_
+next(ACE_Message_Block *&entry)
+done()
+int advance()
ACE_Message_Queue_Reverse_Iterator<ACE_SYNCH_USE, TIME_POLICY>
-ACE_Message_Queue<ACE_SYNCH_USE, TIME_POLICY> &queue_
+next(ACE_Message_Block *&entry)
+done()
+int advance()
Monitor_Base
Size_Monitor
ACE_Reactor_Notification_Strategy
ACE_Message_Block
  • ACE_SYNCH_CONDITION_T not_empty_cond_:队列不为空的条件变量
  • ACE_SYNCH_CONDITION_T not_full_cond_:队列没有满的条件变量
  • ACE_Notification_Strategy *notification_strategy_:通知策略,当消息进入队列时触发
  • ACE::Monitor_Control::Size_Monitor *monitor_:当大小改变时,发送队列大小

ACE_Message_Block:当中的cont_用于将多个消息块组合

初始化

  • ACE_Message_Queue()构造函数
  • open()

流量控制

  • high_water_mark()
  • low_water_mark()
    当队列中的字节数大于高水位时,入队列会阻塞,等到没有满的条件变量满足。当有入队列操作时,也会唤醒等待不为空的条件变量的线程。
    在出队列时,如果当前字节数小于低水位时,会唤醒阻塞在等待没有满条件变量的线程

入出队列

其参数为ACE_Message_Block

  • enqueue_prio
  • enqueue_deadline
  • enqueue
  • enqueue_tail
  • enqueue_head
  • dequeue
  • dequeue_head
  • dequeue_prio
  • dequeue_tail
  • dequeue_deadline
  • is_full
  • is_empty

关闭销毁

  • close
  • flush:有加锁操作
  • flush_i
  • ~ACE_Message_Queue

状态变更

  • deactivate
  • activate
  • pulse

ACE_Message_Queue_Ex

内部还是使用ACE_Message_Queue,只是传入的数据是具体的数据类型,不是 ACE_Message_Block
其结构为

ACE_Message_Queue_Ex<ACE_MESSAGE_TYPE, ACE_SYNCH_USE, TIME_POLICY>
# ACE_Message_Queue<ACE_SYNCH_USE, TIME_POLICY> queue_
ACE_Message_Queue_Ex_Iterator<ACE_MESSAGE_TYPE, ACE_SYNCH_USE, TIME_POLICY>
-ACE_Message_Queue_Iterator<ACE_SYNCH_USE, TIME_POLICY> &queue_
+next(ACE_Message_Block *&entry)
+done()
+int advance()
ACE_Message_Queue_Ex_Reverse_Iterator<ACE_MESSAGE_TYPE, ACE_SYNCH_USE, TIME_POLICY>
-ACE_Message_Queue_Reverse_Iterator<ACE_SYNCH_USE, TIME_POLICY> &queue_
+next(ACE_Message_Block *&entry)
+done()
+int advance()
ACE_Message_Queue_Iterator
ACE_Message_Queue_Reverse_Iterator
  • 20
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值