14、线程(2)

来源:互联网 发布:北京软件定制开发 编辑:程序博客网 时间:2024/06/11 10:11

1、带超时的互斥量

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

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

//初始化静态分配定义PTHREAD_RWLOCK_INITIALIZERint 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);
原创粉丝点击