【Linux】线程属性控制
来源:互联网 发布:怎么网络推广 编辑:程序博客网 时间:2024/04/30 11:04
1.概念
多线程的控制流程可以长期并存,操作系统会在各线程之间调度和切换,就像在多个进程之间调度和切换一样。由于同一进程的多个线程共享同一地址空间,因此 Text Segment、Data Segment 都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一 个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境:
(1)文件描述符表
(2)每种信号的处理方式( SIG_IGN、SIG_DFL 或者自定义的信号处理函数)
(3)当前工作目录(4)用户 id 和组 id
但有些资源是每个线程各有一份的:
(1)线程 id
(2)上下文,包括各种寄存器的值、程序计数器和栈指针
(3)栈空间
(4)errno 变量
(5)信号屏蔽字
(6)调度优先级
我们将要学习的线程库函数是由 POSIX 标准定义的,称为 POSIX thread 或者 pthread。在 Linux 上线程函数位于 libpthread 共享库中,因此在编译时要加上
-lpthread 选项。
2. 函数
(1)创建
函数:int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
返回值:成功返回0,失败返回错误号。
(2)等待
函数:int pthread_join(pthread_t thread, void **retval);
返回值:成功返回0,失败返回错误号。
(3)终止
如果需要只终止某个线程而不终止整个进程,可以有三种方法:
a. 从线程函数 return。这种方法对主线程不适用,从 main 函数 return 相当于调用 exit。
b. 线程可以调用 pthread_exit 终止自己。
函数:void pthread_exit(void *retval);
c. 一个线程可以调用 pthread_cancel 终止同一进程中的另一个线程。
取消函数:int pthread_cancel(pthread_t thread);
(4)分离
函数:int pthread_detach(pthread_t thread);
返回值:成功返回0,失败返回错误号。
线程可以自己分离自己,函数:pthread_detach(pthread_self());
线程也可以被别人分离,函数:pthread_detach(thread_id);
3. 举例
子线程调用 pthread_exit,主线程调用 pthread_cancel 终止线程的代码:
mypthread.c 的代码:
Makefile 的代码.:
运行结果如下:
分离线程,子线程调用 pthread_exit,主线程调用 return 终止线程的代码:
mypthread.c 的代码:
运行结果如下:
- Linux - 线程属性控制
- 【Linux】线程属性控制
- linux 线程属性控制
- Linux线程编程 - 线程属性控制
- Linux程序设计学习笔记----异步信号与线程属性控制
- linux 线程 线程属性
- 【Linux】线程(概念、特点、线程控制代码--创建/等待/终止、分离与结合属性)
- linux线程控制&线程分离
- linux 的线程控制
- Linux信号量线程控制
- Linux信号量线程控制
- Linux/UNIX线程控制
- Linux/UNIX线程控制
- Linux学习--线程控制
- linux 线程控制
- Linux--线程控制
- linux线程控制
- linux线程属性、共享属性
- 介绍几种运动——匀速、加速、缓冲、弹性
- JAVA集合入门
- C#中的Attribute详解
- weblogic.Deployer命令行参考配置说明
- 08 八进制和十六进制
- 【Linux】线程属性控制
- 冒泡排序的原理
- 新浪短网址API接口
- Java编程之反射中的注解详解
- Caused by: org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found char
- Use powershell config network
- SQLyog 激活 注册码
- ORCLE 查询一段时间(时间点不定,时差确定)内符合一定条件的数据
- Spring:IOC—控制反转(3)