首页 > 其他分享 >操作系统终止线程

操作系统终止线程

时间:2024-08-26 19:52:22浏览次数:7  
标签:return 操作系统 void exit 结束 pthread 终止 线程

终止线程

方法1:从线程入口函数中return,主线程除外。

方法2:调用pthread_exit函数。

void pthread_exit (void* retval);
retval - 和线程过程函数的返回值语义相同。

注意:在任何线程中调用exit函数都将终止整个进程。

问题:主线程结束,子线程是否会跟着一起结束?

主线程结束,并不会导致子线程跟着一起结束,它们之间没有必然联系。

但是,主线程如果执行到最后一行,会执行return 0或隐藏的return 0,而在main函数中执行return 0就相当于执行exit(0),然后当前进程就会结束,有两种方法可以避免这种情况:

方法1:

等待所有子线程结束,主线程再执行return 0;

子线程在一定时间内会结束,侧使用pthread_join。

方法2:

立即结束主线程,不要让它执行return 0;

当子线程的结束时间不确定,则使用pthread_exit。

注意:这种情况会产生新的问题,子线程的资源没有办法回收。

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
​
void* run(void* arg)
{
    for(int i=0; ;i++)
    {
        printf("子线程:%lu %d\n",pthread_self(),i);
        sleep(1);
    }
}
​
int main(void)
{
    pthread_t tid;
    pthread_create(&tid,NULL,run,NULL);
​
    for(int i=0; i<3; i++)
    {
        printf("我是主线程,我要结束了,倒计时:%d\n",3-i);
        sleep(1);
    }
    
    exit
}

标签:return,操作系统,void,exit,结束,pthread,终止,线程
From: https://blog.csdn.net/zzt_is_me/article/details/141572042

相关文章

  • 一次性下发100w的优惠券/短信/二维码,兼顾线程池参数可配置 在Spring 中 ThreadPoolTas
    一次性下发100w的优惠券/短信/二维码,兼顾线程池参数可配置在Spring中ThreadPoolTaskExecutor的使用1、场景需求分析针对6.18,11.11这种场景,平台一次性发布500w张优惠券,或者对于锁单用户统一发下100w张确认信息,同时我们平时有抢购茅台的场景,京东一次性发布10w个验证码,主要是针......
  • Python 多线程编程技巧举例
    Python多线程(Multithreading)是一种编程技术,允许在同一程序中同时执行多个独立的逻辑流,即线程。每个线程都有自己的程序计数器、栈空间和局部变量,它们共享同一进程的全局变量、文件描述符和其他系统资源。线程是操作系统调度的基本单位,能够在单个进程中并发运行,从而实现任务......
  • B站宋红康JAVA基础视频教程个人笔记chapter08-09(异常处理+多线程)
    文章目录1.异常处理方式1:try-catch-finally2.异常处理方式1:throws3.程序,进程,线程的区别4.线程的创建4.1线程的创建方式1:4.2线程的创建方式2:5.线程类的常用方法和生命周期5.1线程的生命周期jdk5之前6.线程的安全问题和同步机制6.线程之间的通信6.1为什么需要线程之间......
  • 解读GaussDB(for MySQL)表级恢复,看线程数及分块分行策略如何提升恢复性能?
    本文分享自华为云社区《【华为云MySQL技术专栏】GaussDB(forMySQL)表级恢复中mydumper、myloader的应用与性能优化》,作者:GaussDB数据库。 背景介绍表级时间点恢复技术为“误删表”场景提供了一种快速且精确的恢复方案。通过将指定时间点的数据恢复到临时实例,再把用户所需的......
  • 多线程的使用-->1
    目录1.程序进程线程的定义2.创建线程run方法3.启动线程4.线程优先级5.精灵线程(守护线程)1.程序进程线程的定义程序:一组静态的代码进程:一个处于运行状态的程序。进程=执行内存+线程每当启动一个进程时,至少会有一个线程,称为:主线程线程:程序运行的过程......
  • 线程池相关面试题
    一、JDK自带的线程池有那些?1.Executors.newCachedThreadPool()创建一个可缓存线程的线程池,若线程池长度超出需要,可回收线程,若没有可回收,则新建线程2.Executors.newFixedThreadPool()创建定长线程池,可控制线程最大并发数,超出的线程在队列中等待3.Executors.newScheduled......
  • 【MySQL-23】万字总结<InnoDB引擎>——【逻辑存储结果&架构(内存结构,磁盘结构,后台线程)&事
    前言大家好吖,欢迎来到YY滴MySQL系列,热烈欢迎!本章主要内容面向接触过C++的老铁主要内容含:欢迎订阅YY滴C++专栏!更多干货持续更新!以下是传送门!YY的《C++》专栏YY的《C++11》专栏YY的《Linux》专栏YY的《数据结构》专栏YY的《C语言基础》专栏YY的《单片机》专栏YY......
  • Java笔试面试题之多线程常见考点总结
    Java多线程面试题涵盖了Java多线程编程的多个重要方面,主要考察面试者对Java并发编程的理解和应用能力。以下是常见的考点总结:基本概念与区别:进程与线程的区别:进程是资源分配的基本单位,线程是CPU调度的基本单位,线程共享进程资源。Java堆与栈的区别:堆用于存储对象实例,栈用......
  • sql server导入mysql,使用python多线程
    概述在上一篇文章中,链接:https://www.cnblogs.com/xiao987334176/p/18377915使用工具SQLyog进行导入,传输过程是单进程的,一个表一个表的传,一条条数据插入,所以传输速度会比较慢。如果sqlservermdf文件在200m左右,传输需要花费30分钟左右。如果来了一个10GB左右的mdf的文件,需要25......
  • [操作系统]IO多路复用
    从阻塞I/O到I/O多路复用阻塞I/O,是指进程发起调用后,会被挂起(阻塞),直到收到数据再返回。如果调用一直不返回,进程就会一直被挂起。因此,当使用阻塞I/O时,需要使用多线程来处理多个文件描述符。多线程切换有一定的开销,因此引入非阻塞I/O。非阻塞I/O不会将进程挂起,调用时会立......