linux中线程的基本相关知识
来源:互联网 发布:linux文件实时同步ftp 编辑:程序博客网 时间:2024/05/21 03:17
在大型的工程中,使用线程并行处理数据能够明显加快运行处理速度,添加一个线程主要有以下几个步骤:
(1)、创建线程,pthread_create;
(2)、初始化互斥锁,pthread_mutex_init;
(3)、申请互斥锁,pthread_mutex_lock;
(4)、释放互斥锁,pthread_mutex_unlock;
(5)、等待线程结束,pthread_join;
(6)、线程退出,pthread_exit;
一般创建的副线程里面的参数需要从主线程中传入,参数的传递过程主要做法为:在主线程中定义一个关于副线程的结构体,里面定义各种副线程需要用到的参数以及相关的结构体,然后在主线程中将参数传入到结构体中,最后在创建线程的时候将定义的结构体一并传入到副线程中,因此相关的参数也就传递到了副线程中,一般来说,类的传递,数组的传递都需要指针传递。
线程中的互斥锁,一般是为了提供对共享资源的访问保护,即在同一时间段内,共享资源只有一个线程就可以访问。
锁的初始化主要分为静态与动态两种情况:
(1)、对于静态分配的互斥量,可以设置为PTHREAD_MUTEX_INITIALIZER,或者是pyhtead_mutex_init;
(2)、对于动态分配的互斥量,在申请内存后(malloc),通过pthread_mutex_init进行初始化,在释放内存钱(free)需要使用pthread_mutex_destroy;
返回值:成功则返回0,错误返回错误编号。
对共享资源的访问,需要对互斥量进行加锁操作,如果互斥量已经上锁,调用线程会阻塞,直到互斥量解锁,在完成了对共享资源的访问后,需啊哟对互斥量进行解锁操作。简单的来说,就是比如定义一个共享变量A,在线程1中对A进行访问之前需要对A进行加锁操作,访问结束后解锁A,在访问A的这段时间内,如果线程2也需要访问A,这时在线程2中也对A进行加锁操作,实际上线程2运行到这一部分的时候,由于线程1中A的访问并没有结束,因此线程2会被阻塞,相当于sleep一段时间,直到线程1中A的访问结束,在线程1中对A进行解锁操作,直到这一部分结束后,线程2才可以访问A,同理,线程2在访问A的时候线程1也是同样的操作。
在主线程中加上等待线程结束这一句后,主线程这句后面的程序会等到线程结束后处理,如果在副线程中加上线程退出后,程序会跳转到等待线程结束这行程序,然后继续后面的程序操作。
- linux中线程的基本相关知识
- 线程的相关知识
- 线程的相关知识
- 线程的相关知识
- 线程的相关知识
- 有关linux的相关知识,不断更新中
- 线程的相关知识2
- 线程的相关知识3
- linux的相关知识
- Linux下线程相关知识总结
- Android中线程的相关知识及线程池的管理工具类
- linux中线程相关函数
- linux中线程相关函数
- Linux 挂载点的相关知识
- Linux vi的相关知识
- linux 环境变量相关的知识
- linux相关的知识记录
- 线程的创建方式及相关知识
- 《飞猪规则》 第二章 自由行及跟团游类商品发布规范
- Servlet线程安全性问题总结
- leetcode#551. Student Attendance Record I
- linux常用命令
- springboot中集成jsp,打成jar包可用jsp
- linux中线程的基本相关知识
- 第三次爬虫实战--模拟登录Freelancer
- 图解PCIE原理(从软件角度)
- 持续集成之jenkins实践教程:基础篇(1): 邮件设置
- ORB-SLAM(四)追踪
- 时间戳相减的几种方法
- ORB-SLAM(五)优化
- 二叉树的各种操作(遍历/深度/距离/转换)
- ORB-SLAM(六)回环检测