线程基础总结

线程基础总结

一、线程:

①基础:线程是进程内部的线索,共享整个进程的资源,线程是雕塑的单位,是操作系统分配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

解锁与上锁将通过一个例子进行解释

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值