线程的使用及相关代码

来源:互联网 发布:股票入门 知乎 编辑:程序博客网 时间: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,只要线程能拿到打开

的文件的文件描述符,就可以通过文件描述符操作文件。

相关代码: