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);
阅读全文
0 0
- 14、线程(2)
- 线程 (2)-----线程安全
- 线程(2)-----线程池
- 线程2:线程通信事件机制(单线程、两个线程、多个线程通信)
- 线程入门2(线程安全)
- Java线程总结(2):线程同步
- Java线程理解(2) 线程生命周期
- perl 线程(2)
- 线程属性(2)
- 线程属性(2)
- 线程学习(2)
- POSIX线程(2)
- 线程安全(2)
- 线程安全(2)
- 线程(2) ---volatile
- 线程(2)-----synchronized
- 线程通信(2)
- 线程汇总(2)
- SPFA算法模板
- PAT 1005. 继续(3n+1)猜想 (25) java
- transient关键字
- 面试问题(一个基础平台应该包含哪些模块)
- R爬取经纬度对应位置信息
- 14、线程(2)
- android studio ormLite复杂条件查询
- 网络判断
- EA&UML日拱一卒-状态图::延缓事件
- 解决GVIM中C-A组合键不起作用的问题
- Hibernate OneToOne注解关联查询案例
- DefaultAnnotationHandlerMapping不起作用,分析原因
- int ,long , long long类型的范围
- 10月集训test6