• 线程退出学习


    aCoral操作系统中,采用了和Linux一样的方式退出线程,线程函数不用死等货显示调用退出相关函数,也就是说用户不用担心函数执行完后的事情,因为aCoral操作系统帮你做了线程退出相关函数,当线程代码执行完后,系统会隐式调用acoral_thread_exit()函数进行线程退出相关的处理。

    void acoral_thread_exit(){
            acoral_kill_thread(acoral_cur_thread);
    }
    
    • 1
    • 2
    • 3
    void acoral_kill_thread(acoral_thread_t *thread){
    	acoral_evt_t *evt;
    	acoral_enter_critical();
            /*	*/
            /*	*/
    	if(thread->state&ACORAL_THREAD_STATE_SUSPEND){//如果线程处于挂起状态,则需要从相关列表中取下来
    		evt=thread->evt;
    		/**/
    		if(thread->state&ACORAL_THREAD_STATE_DELAY){ //延时挂起,则从延时队列上取下来
    			acoral_list_del(&thread->waiting);
    		}else
    		{
    			/**/
    			if(evt!=NULL){ //如果是事件等待,则从事件队列取下。
    				acoral_evt_queue_del(thread);
    			}
    		}
    	}
    	acoral_unrdy_thread(thread); //从就绪队列上取下来
    	acoral_release_thread1(thread); //释放线程
        acoral_exit_critical();
    	acoral_sched();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    void acoral_release_thread1(acoral_thread_t *thread){//SPG这个和acoral_release_thread有什么区别
    	acoral_list_t *head;
    	acoral_thread_t *daem;
    	thread->state=ACORAL_THREAD_STATE_EXIT;
    	head=&acoral_res_release_queue;
    	acoral_list_add2_tail(&thread->waiting,head); //将线程挂到回收队列,供daemon线程回收资源
    
    	daem=(acoral_thread_t *)acoral_get_res_by_id(daemon_id);
    	acoral_rdy_thread(daem); //唤醒daemon线程回收资源
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    将线程设置为退出状态,如果是当前线程,只能是EXIT状态,表明还不能释放该线程的资源,如TCB、堆栈,因为线程尽管要退出了,但是还没完成退出的使命,还需要继续向前走,直到走到线程切换函数HAL_SWITCH_TO函数。

    线程即使挂到回收队列,但如果状态不是RELEASE,也是不能回收的

  • 相关阅读:
    字符串5:剑指Offer58-II.左旋转字符串
    Tessent IJTAGug系列 -第一章 IJTAG介绍
    8000字讲透OBSA原理与应用实践
    电路分析中的函数介绍
    聊聊什么是分布式事务
    flutter 网络图片封装
    高效查询大量快递信息,轻松掌握技巧
    Linux-实用操作(黑马学习笔记)
    【CV】Landslide4Sense-2022
    智能毫米波雷达人体感应器,实时检测静止存在,智能化控制方案
  • 原文地址:https://blog.csdn.net/Caramel_biscuit/article/details/132773206