微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

进程线程总结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()

原文地址:https://www.jb51.cc/wenti/3279807.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐