互斥量(二)

互斥量从本质来说是一把锁,在访问共享资源前对互斥量进行设置(加锁),在访问完成后释放(解锁)互斥量。对互斥量进行加锁以后,任何其他试图再次对互斥量加锁的线程都会被阻塞,直到当前线程释放该互斥锁。如果解锁前有一个以上的线程阻塞,那么解锁后这些线程就变为运行状态,直到其中一个线程重新对互斥量加锁,这时其他线程又变为阻塞状态。

为了让线程访问数据不产生冲突,这就需要对变量进行加锁,使得同一时刻只有一个线程访问变量;

当互斥量加锁以后,其他所有需要访问该互斥量的线程都将阻塞;

当互斥量解锁以后,所有因为这个互斥量阻塞的线程都将变为就绪态,第一个获得CPU的线程会获得互斥量,变为运行态,而其他线程会继续变为阻塞,在这种方式下访问互斥量每次只有一个线程能向前执行。

初始化互斥量的两种方法
(1)方法一:静态分配:
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER
(2)方法二:动态分配:
Int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

销毁互斥量
如果动态分配互斥量(例如,通过调用malloc函数),需要调用pthread_mutex_destroy函数释放内存。
函数原型:int pthread_mutex_destroy(pthread_mutex_t *mutex);

加锁
Int pthread_mutex_lock(pthread_mute_t *mutex)
Int pthread_mutex_trylock(pthread_mute_t *mutex)

解锁
Int phtread_mutex_unlock(pthread_mute_t *mutex)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值