码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 线程退出学习


    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,也是不能回收的

  • 相关阅读:
    NX二次开发-通过点击按钮来控制显示工具条
    RapidLayout:中英文版面分析推理库
    归并排序-Python
    Mish-撼动深度学习ReLU激活函数的新继任者
    uboot启动流程-涉及board_init_f 函数
    2023最新Python学习路线+百部python基础视频
    【微信小程序开发】宠物预约医疗项目实战-登录实现
    自动化测试岗花20K招人,到最后居然没一个合适的,招两个应届生都比他们强吧
    React TypeScript 定义组件的各种方式
    Spring Boot启动流程分析及原理
  • 原文地址:https://blog.csdn.net/Caramel_biscuit/article/details/132773206
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号