线程资源的释放和重启

发布于 2020-09-05 11:54:31

老师您好,我现在开发一个物联网项目。有一个问题需要请教:

在具体应用中,需要检测到网络通讯中断后重启若干线程:
    如:线程A, 线程B,线程C。
因为我在线程入口函数中有资源申请的动作。或者IPC创建的动作。导致在不复位MCU的前提下,释放多个线程资源后,再重启多个线程中会失败。某些线程在删除后不能正常启动。
我的入口函数大概是如此结构:
    fun_entry(void * parameter)
    {
        //申请内存
        //创建邮箱
        //创建信号量
        
        while{
            do something;
        }
    }
 这样的结构会导致线程删除前释放资源,和删除后重新启动线程。处理很麻烦,而且有时候不能正常启动删除的线程。
 另外我释放资源和重启线程都是扔到 工作队列(workququeue)去处理的。

查看更多

关注者
0
被浏览
130
JQRR_7669
JQRR_7669 认证专家 2020-09-05

建议采用资源申请和释放均由线程自己进行管理方式设计,具体方案是:

static bool thread_exit_req = false;
static void thread_entry(void * parameter)
{
    //申请内存
    //创建邮箱
    //创建信号量

    while(1)
    {
        do something;
        if (thread_exit_req )
        {
            break;
        }
    }
    
    //删除信号量
    //删除邮箱
    //释放内存
}

void xxx_thread_start(void)//线程启动接口函数
{
    //创建线程
    thread_exit_req = false;
}

void xxx_thread_stop(void)//线程终止接口函数
{
    thread_exit_req = true;
}
3 个回答
hichard
hichard 认证专家 2020-09-05

线程最好不被其他线程删除,可以给的标志,让线程自己退出,好释放资源

zhutourou
zhutourou 2020-09-08

感谢专家的指导,我消化一下知识。在项目的下一版中应用进去。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友