多线程控制&多线程安全&死锁&读写锁

多线程概念

在传统操作系统上pcb是一个进程,描述一个程序的运行,还有一个tcp描述实现线程,但是 在linux下使用pcb描述实现了程序调度并且这些pcb共用同一个虚拟地址空间,相较于传统的pcb更加轻量化一点,因此也把linux下的pcb称之为轻量级进程。

进程是系统资源分配的基本单位。
线程是CPU调度的基本单位。

线程间的独有与共享:

独有:栈,寄存器,信号屏蔽字,errno,标识符
共享:虚拟地址空间(代码段,数据段),文件描述表,信号处理方式,工作路径,用户ID,组ID

多进程/多线程进行多任务处理(优缺点):

多线程:线程间通信更加方便灵活(全局变量,函数传参)
线程的创建/销毁成本更低
线程间的调度成本更低
异常和某个系统调用针对的是整个进程。
多进程:具有独立性,因此更加稳定,健壮。
例如:对主功能程序安全性稳定性要求更高的最好使用多进程(shell/服务器),剩下的使用多线程
共同优点
CPU密集型程序/IO密集型程序
并行压缩CPU处理/并行压缩IO等待时间
在CPU资源足够的情况下,可以使程序的性能更高

线程控制

线程控制的接口都是库函数(操作系统并没有向用户提供创建一个轻量级进程的接口,因此大佬门才封装的一套线程控制接口,所以在使用的时候链接库文件 -lpthread)

线程创建

int pthread_create(pthread_t tid,pthread_attr_t attr,void(thread_routine)(voidarg),void arg);**

tid:用于获取线程id,通过这个id可以找到线程的描述信息,进而访问pcb(轻量级进程完成控制)【线程在虚拟地址空间中开辟的线程空间的首地址(线程信息)】
attr:线程属性,通常置NULL
thread_routine:线程入口函数,创建一个线程就是为了运行这个函数,函数运行完毕,则线程退出
arg:通过线程入口函数传递给线程的参数
返回值:0-成功,非0值-失败errno

ps -efL | grep create:查看线程
在这里插入图片描述
代码演示:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<pthread.h>

void* thread_start(void* arg){
   

    while(1){
   
        printf("主线程传递了一个参数:%s\n",(char*)arg);
        sleep(1);
    }
    return NULL;
}
int main(){
   

    pthread_t tid;//无符号长整形
    char buf[]="好运来~\n";
    int ret=pthread_create(&tid,NULL,thread_start,(void*
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值