C语言如何在线程间实现同步和互斥

本文介绍了C语言中线程同步和互斥的重要概念,重点讲解了互斥锁和信号量这两种机制。互斥锁适用于保护单个资源,确保在同一时刻只有一个线程访问,而信号量则可用于多资源的同步问题,通过PV操作控制资源计数。通过pthread_mutex_init、pthread_mutex_lock等函数实现互斥锁操作,sem_init、sem_wait等函数用于信号量的管理。
摘要由CSDN通过智能技术生成

线程之间的同步和互斥解决的问题是线程对共同资源进行访问。Posix有两种方式:
信号量和互斥锁;信号量适用同时可用的资源为多个的情况;互斥锁适用于线程可用的资源只有一个的情况
1、互斥锁:互斥锁是用加锁的方式来控制对公共资源的原子操作(一旦开始进行就不会被打断的操作)
互斥锁只有上锁和解锁两种状态。互斥锁可以看作是特殊意义的全局变量,因为在同一时刻只有一个线程能够对互斥锁进行操作;只有上锁的进程才可以对公共资源进行访问,其他进程只能等到该进程解锁才可以对公共资源进行操作。
互斥锁操作函数:
pthread_mutex_init();//初始化
pthread_mutex_lock();//上锁                            参数:pthread_mutex_t *mutex
pthread_mutex_trylock();//判断上锁                 参数:pthread_mutex_t *mutex

pthread_mutex_unlock();//解锁                        参数:pthread_mutex_t *mutex

pthread_mutex_release();//消除互斥锁             参数:pthread_mutex_t *mutex

互斥锁分为快速互斥锁、递归互斥锁、检错互斥锁;在 init 的时候确定
int pthread_mutex_t(pthread_mutex_t *mutex, const pthread_mutex_t mutexattr);
    第一个参数:进行操作的锁
    mutexattr:锁的类型,默认快速互斥锁(阻塞)

2、信号量:信号量本质上是一个计数器,在操作系统做用于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值