线程的使用及相关代码
来源:互联网 发布:股票入门 知乎 编辑:程序博客网 时间:2024/06/04 20:02
线程的创建
#include <pthread.h>
int pthread_create(pthread_t *id, pthread_attr_t *attr,
void*(*pthread_fun)(void*), void *arg);
id : 线程的编号,由系统自动填充;
attr: 线程属性;
pthread_fun: 线程创建以后所调用的函数地址;
arg: 传递给函数线程的参数。
总结:
1、pthread_create 函数是库函数,编译的时候必须加载其动态库。
2、和写一个普通函数没有明显差别。只不过在主线程不会调用函数,而是在创建
线程的时候指定函数线程执行的代码入口地址(即就是函数的地址)。称主函数为住执
行序列,函数的执行为函数线程执行流。
3、主线程和函数线程同时执行。一个进程同时执行多个任务。
5、线程退出
exit 是结束进程的函数,主线程要结束,但是函数线程还在运行,我们主线程就不
能调用exit 结束,必须使用: void pthread_exit(void *reval);
6、线程等待其他线程结束
int pthread_join(pthread_t id, void**p);
作用: 获取指定线程由pthread_exit 设置的退出信息。
特性: pthread_join 函数会阻塞直到等待的线程退出。(类比进程控制中的wait 函
数)
7、给函数线程传递参数
i. 传值
将变量的值强转成void* ,函数线程中,对arg 的值强转成变量的类型。
ii. 传地址
将变量的地址强转成void*, 函数线程中,对arg 的值强转成变量类型的指针,
再去取值。
注意:: 如果是传递变量地址,获取变量值时,必须考虑变量的值是否被改变。
8、线程间的数据共享:
全局变量共享
栈区数据不共享
堆区共享
文件: 共享同一个进程的线程,使用一个PCB,只要线程能拿到打开
#include <pthread.h>
int pthread_create(pthread_t *id, pthread_attr_t *attr,
void*(*pthread_fun)(void*), void *arg);
id : 线程的编号,由系统自动填充;
attr: 线程属性;
pthread_fun: 线程创建以后所调用的函数地址;
arg: 传递给函数线程的参数。
总结:
1、pthread_create 函数是库函数,编译的时候必须加载其动态库。
2、和写一个普通函数没有明显差别。只不过在主线程不会调用函数,而是在创建
线程的时候指定函数线程执行的代码入口地址(即就是函数的地址)。称主函数为住执
行序列,函数的执行为函数线程执行流。
3、主线程和函数线程同时执行。一个进程同时执行多个任务。
5、线程退出
exit 是结束进程的函数,主线程要结束,但是函数线程还在运行,我们主线程就不
能调用exit 结束,必须使用: void pthread_exit(void *reval);
6、线程等待其他线程结束
int pthread_join(pthread_t id, void**p);
作用: 获取指定线程由pthread_exit 设置的退出信息。
特性: pthread_join 函数会阻塞直到等待的线程退出。(类比进程控制中的wait 函
数)
7、给函数线程传递参数
i. 传值
将变量的值强转成void* ,函数线程中,对arg 的值强转成变量的类型。
ii. 传地址
将变量的地址强转成void*, 函数线程中,对arg 的值强转成变量类型的指针,
再去取值。
注意:: 如果是传递变量地址,获取变量值时,必须考虑变量的值是否被改变。
8、线程间的数据共享:
全局变量共享
栈区数据不共享
堆区共享
文件: 共享同一个进程的线程,使用一个PCB,只要线程能拿到打开
的文件的文件描述符,就可以通过文件描述符操作文件。
相关代码:
阅读全文
0 0
- 线程的使用及相关代码
- 如何查找占用CPU最高的线程及相关代码
- MyBatis相关代码生成器(Generator)的下载及使用
- Android线程的相关使用
- 线程相关及需要注意的地方
- 线程的创建方式及相关知识
- 展示C代码覆盖率的gcovr工具简介及相关命令使用示例
- Java四种线程池的介绍及详细使用代码示例
- Java四种线程池的介绍及详细使用代码示例
- JVM调优-使用jstack找出耗费CPU的线程及代码
- 软件加密及相关代码
- 软件加密及相关代码
- 安卓的进程与线程及其相关代码实现
- TensorFlow使用C++加载使用训练好的模型,.cc文件代码实现的相关类及方法总结
- ctags的使用及相关参数介绍
- python相关的开发及使用工具
- ctags的使用及相关参数介绍
- regexp_like的相关知识及使用示例
- freemarker的基本使用和常用标签
- bzoj 2813: 奇妙的Fibonacci 数学+线性筛
- 第三周-项目2
- [bzoj-1047][HAOI2007]理想的正方形 题解
- hbase
- 线程的使用及相关代码
- HttpClient的用法
- JavaWeb知识体系梳理和学习资料汇总
- XML解析(Dom /DOM4J)
- C++中两个类简单互相包含会形成死循环
- 毕业设计引发的一些想法
- 搭建git代码服务器教程
- hibernate Criteria
- centos部署svn服务器以及相关重要配置