14、线程(2)

本文介绍了并发编程中的关键同步原语,包括带超时的互斥量、读写锁、条件变量、自旋锁及屏障的概念与使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、带超时的互斥量

//等待的时间是绝对时间
int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);

2、读写锁
写加锁只有一个线程可以,读加锁所有线程都可以(读加锁后在想写加锁不可以)。

//初始化
静态分配定义PTHREAD_RWLOCK_INITIALIZER

int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
int pthread_rwlock_destroy(pthread_rwlock_t * rwlock);
//加解锁
int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
//读加锁、写加锁都可以用该函数解锁
int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);

//判断能不能解锁
int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);

3、条件变量
条件变量自身由互斥量保护的,等待条件满足

静态条件定义=PTHREAD_COND_INITIALIZER
//动态
int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);
int pthread_cond_destroy(pthread_cond_t *cond);

//等待条件满足
int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);
int pthread_cond_timewait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex, const struct timespec *restrict tsptr);

//通知条件已经满足,唤醒线程
int pthread_cond_signal(pthread_cond_t *cond);
int pthread_cond_boardcast(pthread_cond_t *cond);

4、自旋锁
不是通过休眠使进程阻塞,而是在获取锁之前一直处于忙等。用于锁被持有的时间短,而且线程并不希望在重新调度上花费太多成本。

//若pshared=PTHREAD_PROCESS_SHARED则自旋锁可以访问不同进程的线程
int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
int pthread_spin_destroy(pthread_spinlock_t *lock);

int pthread_spin_lock(pthread_spinlock_t *lock);
int pthread_spin_trylock(pthread_spinlock_t *lock);
int pthread_spin_unlock(pthread_spinlock_t *lock);

5、屏障
允许每个线程等待,直到所有的合作线程都达到了某一点,然后从该店继续执行。

//count指定线程等待的个数
int pthread_barrier_init(pthread_barrier_t *restrict barrier, const pthread_barrierattr_t *restrict attr, unsigned int count);

int pthread_barrier_destroy(pthread_barrier_t *barrier);

//如果最后一个线程调用该函数,则所有线程被唤醒
int pthread_barrier_wait(pthread_barrier_t *barrier);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值