Linux——线程



线程

线程的概念线程是进程内部的一条执行序列(执行流),每个进程至少有一条执行序列:main的执行体。进程可以通过线程库创建N条线程,这些新创建的线程称之为线程函数,main函数所代表的线程为主线程。

进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才运行。

线程与进程的区别

  1. 进程是资源分配的最小单位,线程是cpu调度的最小单位。

  2. 线程是轻量级的进程

  3. 管理方式不同,进程时PCB管理,线程是由线程结构管理。

线程间同步的控制方式:

1.信号量线程的信号量与进程间通信中使用的信号量的概念是一样的,         只是线程同步是控制线程执行和访问临界区域的方法。

  获取或创建:

           Int sem_init(sem_t*sem,intshared,int value);

  P 操作: int sem_wait(sem_t *sem);

  V 操作: int sem_post(sem_t*sem);

  删除:   intsem_destroy(sem_t * sem);

 

2.互斥锁:

                   概念:完全控制临界资源,如果一个线程完成加锁状态,则其他线程无论如何都将无法在完成加锁,也就是无法对临界资源进行访问。

        就像使用打印机打印东西时,别人刚好也打印,如果不做处理的话,打印出来的东西肯定错乱。因此需要互斥锁来解决。

        初始化:

Int pthread_mutex_lock(pthread_mutex_t*mutex,

pthread_mutex_arr_t * attr);

        加锁:

intpthread_mutex_lock(pthread_mutex_t*mutex);//阻塞

                                  int pthread_mutex_trylock(pthread_mutex_t*mutex);//非阻塞

        解锁:        intpthread_mutex_unlock(pthread_mutex_t*mutex);

        释放:       Intpthread_mutex_destroy(pthread_mutex_t*mutex);



     

3.条件变量


概念:条件变量是利用线程间共享的全局变量进行同步的一种机制,主要包括两个动作:一个线程等待条件变量的条件成立而挂起,另一个线程使条件成立(给出条件成立信息),为了防止竞争,条件变量的使用总是和一个互斥锁结合在一起。


静态创建:


         Pthread_cond_t cond =PTHREAD_COND_INITALIZER;


动态创建:


         Int pthread_cond_init(pthread_cond_t*cond,


pthread_condattr_t*cond_attr);


   注销:


            Int pthread_cond_destroy(pthread_cond_t*cond);


      头文件为:#include<pthread.h>;


 


 


信号量与互斥锁的区别:


信号量不一定是锁定某一个资源,而是流程上的概念,比如:有AB两个线程,B线程要等A线程完成某一任务以后在进行自己的下面的操作,这个任务不一定是锁定某一资源,还可以是进行一些计算会处理数据之类。而线程互斥量则是锁住某一资源的概念,在锁定期间其他线程无法对被保护的数据进行操作。





         

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值