进程线程总结(2)

1.什么是线程

线程是轻量级进程。

多线程优点:线程之间除了栈区的内容其他都是共享的

缺点:互斥和同步

创建子线程

pthread_create()

什么时候选择用多线程,什么时候多进程

1创建和销毁较频繁使用线程,因为创建进程花销大。

2需要大量数据传送使用线程,因为多线程切换速度快,不需要跨越进程边界。

3安全稳定选进程;快速频繁选线程

线程相关函数

pthread_create()

参数1:pthread_t* 参数2:线程的属性一般设置为NULL

参数3:函数的指针 void*(void*)

参数4:主线程给子线程传值,设置为NULL

编译时还需要链接pthread库

-pthread

等待子线程结束

pthread_join()

参数1:pthread_t 

参数2:子线程给主线程传值 NULL

3.线程退出

1.主动退出

pthread_exit(void *retval); 参数为NULL,表示该线程退出不带出来值

线程中需要解决的问题

1.互斥

多线程不允许同时访问临界资源

解决方法:

1.互斥锁的作用

引入互斥锁的目的是用来保证共享数据操作的完整性。

互斥锁主要用来保护临界资源

每个临界资源都由一个互斥锁来保护,任何时刻最多只能有一个线程能访问该资源。

线程必须先获得互斥锁才能访问临界资源,访问完资源后释放该锁。如果无法获得锁,线程会阻塞直到获得锁为止

初始化互斥锁

pthread_mutex_init()

参数1:互斥锁

参数2:互斥锁属性//NULL表示缺省属性

返回值

成功:0

出错:-1

申请互斥锁

pthread_mutex_lock()

参数:mutex:互斥锁

释放互斥锁

pthread_mutex_unlock()

函数参数:mutex:互斥锁

返回值:

成功:0

出错:-1

同步

多线程在访问临界资源时,按照一定的操作顺序来访问

信号量:

有名信号量:多进程实现同步

无名信号量:多线程同步

信号灯集:多进程实现同步

1.信号量的引用

信号量代表某一类资源,其值表示系统中该资源的数量,信号量的值为非负整数,它被用来控制对公共资源的访问。

信号量是一个受保护的变量,只能通过三种操作来访问

P操作(申请资源)-1  sem_wait()  sem_trywait()

V操作(释放资源)+1 sem_post()

1.有名管道特点:

1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到。

2.半双工的通信方式,进程通过文件IO来操作有名管道。

3.有名管道遵循先进先出原则,不支持lseek()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好困..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值