线程基础总结
2015-08-10 19:25
197 查看
线程基础总结
一、线程:
①基础:线程是进程内部的线索,共享整个进程的资源,线程是雕塑的单位,是操作系统分配CPU时间的基本实体。当然,为利润提高系统性能,一些操作系统引入了轻量级的进程也被称作线程。
②优点:大大提高了任务一切换的效率;避免了额外的页表缓冲刷新。
二、多线程编程:
①pthread_create:
thread:创建的线程(使用pthread_t先定义变量,变量地址便是thread);
attr:指定线程的属性,一般使用NULL(用以表示缺省属性);
start_routine:线程执行的函数;
arg:传递给线程执行的函数的参数(即是执行函数的形参);
返回值:成功为0,出错为-1。
②pthread_join:(类似于wait())
retval:线程返回的参数;
thread:需要等待的线程;
返回值:成功:0,出错:-1。
③pthread_exit
retval:线程退出时的返回值;
返回值:成功:0,出错:-1。
④pthread_cancel:取消线程
thread:需要取消的线程
Example:
运行结果为:
程序在输出结果后一秒结束,该例主要是为了熟悉函数的使用。注意:在编译是,应加上pthread的链接。
三、Linux线程同步与互斥
①线程特点:
多线程共享同一个进程的地址空间;
线程之间的通信是很容易进行的(通过全局变量便可以实现数据共享和交换);
虽然通信方便,但是通信时,谁先读取数据,谁先写入数据这是一个问题;当正在写的时候读取或者读取的时候写入对数据的影响这也是一个问题,这里便存在着一个竟态(race condition)问题。所以在多线程同时访问共享对象的时候,需要引入同步和互斥的机制。
②同步:(P/V操作)
sem_init:
sem:初始化的信号量;
pshared:信号量共享的范围,一般为0;
value:信号量的初始值;
返回值:成功:0,出错:-1。
sem_wait:(P操作)
sem_post:(V操作)
下面的例子可帮助理解:
注意:编译的时候应加上pthread的链接。
③互斥(互斥锁):
目的:保证共享数据操作的完整性,保护共享(临界:写入读出之间)资源。
pthread_mutex_init():
mutex:使用pthread_mutex_t定义的变量;
attr:互斥锁的属性,一般为NULL;
解锁与上锁将通过一个例子进行解释
一、线程:
①基础:线程是进程内部的线索,共享整个进程的资源,线程是雕塑的单位,是操作系统分配CPU时间的基本实体。当然,为利润提高系统性能,一些操作系统引入了轻量级的进程也被称作线程。
②优点:大大提高了任务一切换的效率;避免了额外的页表缓冲刷新。
二、多线程编程:
①pthread_create:
thread:创建的线程(使用pthread_t先定义变量,变量地址便是thread);
attr:指定线程的属性,一般使用NULL(用以表示缺省属性);
start_routine:线程执行的函数;
arg:传递给线程执行的函数的参数(即是执行函数的形参);
返回值:成功为0,出错为-1。
②pthread_join:(类似于wait())
retval:线程返回的参数;
thread:需要等待的线程;
返回值:成功:0,出错:-1。
③pthread_exit
retval:线程退出时的返回值;
返回值:成功:0,出错:-1。
④pthread_cancel:取消线程
thread:需要取消的线程
Example:
运行结果为:
程序在输出结果后一秒结束,该例主要是为了熟悉函数的使用。注意:在编译是,应加上pthread的链接。
三、Linux线程同步与互斥
①线程特点:
多线程共享同一个进程的地址空间;
线程之间的通信是很容易进行的(通过全局变量便可以实现数据共享和交换);
虽然通信方便,但是通信时,谁先读取数据,谁先写入数据这是一个问题;当正在写的时候读取或者读取的时候写入对数据的影响这也是一个问题,这里便存在着一个竟态(race condition)问题。所以在多线程同时访问共享对象的时候,需要引入同步和互斥的机制。
②同步:(P/V操作)
sem_init:
sem:初始化的信号量;
pshared:信号量共享的范围,一般为0;
value:信号量的初始值;
返回值:成功:0,出错:-1。
sem_wait:(P操作)
sem_post:(V操作)
下面的例子可帮助理解:
注意:编译的时候应加上pthread的链接。
③互斥(互斥锁):
目的:保证共享数据操作的完整性,保护共享(临界:写入读出之间)资源。
pthread_mutex_init():
mutex:使用pthread_mutex_t定义的变量;
attr:互斥锁的属性,一般为NULL;
解锁与上锁将通过一个例子进行解释
相关文章推荐
- Python3写爬虫(四)多线程实现数据爬取
- C#实现多线程的同步方法实例分析
- C#线程间不能调用剪切板的解决方法
- 浅谈chuck-lua中的多线程
- C#简单多线程同步和优先权用法实例
- C#多线程学习之(四)使用线程池进行多线程的自动管理
- C#多线程编程中的锁系统(三)
- C#线程同步的三类情景分析
- C#子线程更新UI控件的方法实例总结
- C#多线程学习之(六)互斥对象用法实例
- 基于一个应用程序多线程误用的分析详解
- C#多线程学习之(三)生产者和消费者用法分析
- C#多线程学习之(一)多线程的相关概念分析
- C#多线程之Thread中Thread.IsAlive属性用法分析
- C#控制台下测试多线程的方法
- Ruby 多线程的潜力和弱点分析
- C++使用CriticalSection实现线程同步实例
- 基于C++实现的线程休眠代码
- C#中WPF使用多线程调用窗体组件的方法
- VB读取线程、句柄及写入内存的API代码实例