线程的自然终止

线程主函数退出时,该线程自然终止。例如,下面的线程运行10秒后终止 。。。

void* Thread_Main(void* context)
{for(int i=0; i<10; i++){printf("i am a thread ...\n");sleep(1);}return NULL;  // 线程主函数退出,线程终止
}

线程的自然终止如果线程里有一个while循环,则应该设置flag,设法令其自然终止。

int  quit_flag = 0;  // 把quit_flag设为1,则线程自然终止
void* Thread_Main(void* context)
{while(!quit_flag){printf("i am a thread ...\n");sleep(1);}return NULL;  // 线程主函数退出,线程终止
}

pthread_join
pthread_join的两个作用:
① 等待B线程自然退出
② 在B线程退出后,回收B线程的系统资源
(每个线程都是一个系统级的资源,一个进程内的线程的数量是受限制的。)pthread_join(handle, NULL);其中,handle是线程对象的句柄

线程只能“自然终止(return)”,不能也不应该强制杀死(kill)。(pthread_cancel不推荐使用)类似操作系统,我们应该让操作系统自然关机,而不应该强制断电关闭。线程的个数是受限制的,因此必须用pthread_join回收。否则,当创建了若干个线程之后,pthread_create就无法创建更多的线程。

pthread_cancel取消线程pthread_cancel: 用于取消(中止)一个正在运行的线程。然而,并不推荐用pthread_cancel,这相当于把一台正在运行的电脑强制断电。pthread_cancel(handle);被cancel之后,线程函数直接中断了。

void* Thread_Main(void* context)
{pthread_setcancelstate (  PTHREAD_CANCEL_ENABLE, NULL );for(int i=0; i<10; i++){printf("i am a thread ...\n");sleep(1);}return NULL;  // 线程主函数退出,线程终止
}
//当线程处于sleep状态时,会自动结束sleep,立即退出

取消点: 默认是立即取消但是可以设置为延迟取消,当线程运行到下一
个取消点时才取消。
pthread_setcancelstate ( PTHREAD_CANCEL_ENABLE, NULL ) ; 
pthread_setcanceltype ( PTHREAD_CANCEL_DEFERRED,NULL) ;
设置取消点
pthread_testcancel();

如下例子:

Makefile源码如下:

EXE=helloworld
SUBDIR=srcCXXFLAGS +=
LDFLAGS += -lpthreadCXX_SOURCES =$(foreach dir,$(SUBDIR), $(wildcard $(dir)/*.cpp))
CXX_OBJECTS=$(patsubst  %.cpp, %.o, $(CXX_SOURCES))
DEP_FILES  =$(patsubst  %.o,  %.d, $(CXX_OBJECTS))$(EXE): $(CXX_OBJECTS)g++  $(CXX_OBJECTS) -o $(EXE) $(LDFLAGS)%.o: %.cppg++  -c  $(CXXFLAGS) -MMD $<  -o  $@-include $(DEP_FILES)clean: rm  -rf  $(CXX_OBJECTS)  $(DEP_FILES)  $(EXE)test:echo $(CXX_OBJECTS)

main.cpp源码如下:

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>int quit_flag = 0;void *Thread_Main(void *context){for(int i = 0; i < 10 && !quit_flag; i++){printf("in thread main: %d ... \n", i);sleep(1);}printf("thread exit. \n");return NULL;
}int main(){pthread_t handle;if(pthread_create(&handle, NULL, Thread_Main, NULL) < 0){printf("failed to create thread!\n");return -1;}//quit_flag = 1;pthread_join(handle, NULL);return 0;
}

程序运行截图如下:

Linux学习笔记-线程的自然终止相关推荐

  1. 大数据开发工程师基本功修炼之史上最全Linux学习笔记(建议)

    我正在参加年度博客之星评选,请大家帮我投票打分,您的每一分都是对我的支持与鼓励. 2021年「博客之星」参赛博主:Maynor大数据 (感谢礼品.红包免费送!) https://bbs.csdn.ne ...

  2. Linux学习笔记(自用)

    Linux学习笔记(自用) 该笔记由尚硅谷的"3天上手LInux"视频整理而成,若有侵权,请联系作者删除 文章目录 Linux学习笔记(自用) 1. 概述 2. 下载 3.文件与目 ...

  3. Linux 学习笔记之超详细基础linux命令 Part 3

    Linux学习笔记之超详细基础linux命令 by:授客 QQ:1033553122 ---------------------------------接Part 2----------------- ...

  4. Linux学习笔记(一):Linux常用命令

    linux学习笔记(一):Linux常用命令 ctrl + l 清屏 clear crtl + c 终止操作 Linux常用命令 文件处理命令 ls:list 功能:显示目录文件 选项: -a 显示所 ...

  5. Linux 学习笔记16 信号量

    Linux 学习笔记16 信号量Semaphore 信号量概念 信号量(或信号灯)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语. 信号量是控制进程(或线程)同步(谁先执行,谁后执行 ...

  6. Linux学习笔记(3)- 网络编程以及范例程序

    Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...

  7. Linux中常用的文件目录,Linux学习笔记2——Linux中常用文件目录操作命令

    ls 显示文件和目录列表 -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 mkdir 创建目录 -p 父目录不存在情况下先生成父目录 cd 切换目录 touch 生成一个空文件 e ...

  8. LINUX学习笔记:31个常用LINUX命令和相关解释

    LINUX学习笔记三: 最近在带新同事,是一个刚入行的萌新,对于linux不是很熟悉,问我怎么来学习. 所以今天接着之前的部分,继续分享一些linux学习资料.有需要的点点保存,没有跳过呗.PS:内容 ...

  9. Linux学习笔记(包含虚拟机及Linux系统安装)

    Linux学习笔记 1.1 Linux简介 1.2 Linux 的版本 1.3 Linux的应用 2.Linux的安装 2.1 虚拟机安装 2.1.1 什么是虚拟机? 2.1.2 VMware介绍 2 ...

最新文章

  1. python错误提示:TypeError: ‘builtin_function_or_method‘ object is not subscriptable
  2. 基于Codis的Redis集群部署
  3. 使用MASM02 - Win32汇编语言010
  4. VMware快照管理器
  5. 物主代词-mine、yours_33
  6. 基于JAVA+SpringBoot+Mybatis+MYSQL的企业员工考勤管理系统
  7. 【C语言】冒泡排序法
  8. CAD学习笔记中级课【模板样式】
  9. 微型计算机及接口技术笔记,2010年自考微型计算机及其接口技术笔记串讲
  10. 云服务三兄弟:公有云、私有云和混合云有何不同
  11. 模块划分-4 模块划分
  12. easywechat微信开发系列(2):公众号网页支付
  13. 三色旗的C语言算法,从算法学起C语言--三色旗问题
  14. 基于asp.net的排球赛事网站设计与实现
  15. 四层PCB核心板制作3——层叠管理
  16. Pacbio测序原理以及SMRT bell文库构建流程简述
  17. 【ACL Findings 2021】Does Robustness Improve Fairness? Approaching Fairness with Word Substitution R
  18. Understand for linux
  19. 百分百背后是百度电商的悲哀
  20. 【校园招聘】广州百田

热门文章

  1. Eclipse Rcp系列 http://www.blogjava.net/dreamstone/archive/2007/02/08/98706.html
  2. 【飞秋】Asp.net MVC2 model验证 看似美好,实则让人失望。
  3. 纽约时报》:乔布斯和苹果的“保密文化”
  4. Python用户界面编程PyQt5的四种的布局方式
  5. 程序员上班都在做什么?
  6. 科普!程序员分不清万圣节和圣诞节?
  7. linux mysql 共享存储空间_Linux UDEV和为MySQL InnoDB共享表空间配置裸设备
  8. ss流量查询 php,Linux_Linux怎么使用ss命令查看系统的socket状态,  Linux系统中,ss命令可用于 - phpStudy...
  9. thinkphp 模板 php函数调用,thinkphp模版调用函数方法
  10. webinf目录下的没有什么_为什么你的减肥没有效果? 来看下这些习惯是否中招...