zoukankan      html  css  js  c++  java
  • linux线程篇 (三) 线程的同步

    1 互斥量

    pthreat_mutex_t mymutex;
    
    //1. 创建 初始化
    int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
    //pthread_mutex_t *mutex 要初始化的互斥量
    //const pthread_mutexattr_t *attr 互斥量的属性,默认为NULL
    
    //2.动态创建的互斥量要在线程结束的时候销毁互斥量
    int pthread_mutex_destroy(pthread_mutex_t *mutex);
    //pthread_mutex_t *mutex 要销毁的动态创建的互斥量
    //3. 加锁
    int pthread_mutex_lock(pthread_mutex_t *mutex);
    //如果该互斥量已经被锁住,再次解锁就会造成阻塞,死锁。
    
    int pthread_mutex_trylock(pthread_mutex_t *mutex);
    //即使互斥量被锁住,再次尝试加锁也不会造成阻塞,而是返回错误码
    //4. 解锁int pthread_mutex_unlock(pthread_mutex_t *mutex);

    2 读写锁

    //互斥量 同一时刻只有1个线程能访问互斥量锁住的数据
    //读写锁有更高的并行性
    
    pthread_rwlock_t rwlock;
    //读模式加锁
    //写模式加锁
    //不加锁
    
    //一次只有1个线程可以拥有写模式 和互斥量一致
    //但是允许多线程在读模式下加锁
    //1.初始化
    int pthread_rwlock_init(pthread_rwlock_t *lock, const pthread_rwlockattr_t *attr);
    
    //2.读锁
    int pthread_rwlock_rdlock(pthread_rwlock_t *lock);
    int pthread_rwlock_tryrdlock(pthread_rwlock_t *lock);
    
    //3.写锁
    int pthread_rwlock_wrlock(pthread_rwlock_t *lock);
    int pthread_rwlock_trywrlock(pthread_rwlock_t *lock);
    
    //4. 解锁
    int pthread_rwlock_unlock(pthread_rwlock_t *lock);

    3 条件变量

    //当互斥锁锁住的时候,但是因为不满足执行条件,就会造成阻塞,无法释放,这时候就需要一种机制来释放该锁
    pthread_cond_t cond;
    //1. 初始化
    int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr);
    
    //2.销毁
    int pthread_cond_destroy(pthread_cond_t *cond);
    
    //3.使用
    int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex);
    //配合互斥量
    
    //4.唤醒
    int pthread_cond_broadcast(pthread_cond_t *cond);
    int pthread_cond_signal(pthread_cond_t *cond);
  • 相关阅读:
    20100420 ~ 20100520 小结与本月计划
    打造第二代测试框架TestDriven 2.0(六)—— 最新测试思路分析
    C# 反射性能测试
    Java 反射与cglib.proxy与cglib.beanmap与直接赋值 性能对比
    Apache Mina 源码分析。
    msn in c#, 最新代码
    20100520 ~ 20100620 小结与本月计划
    messageflow 集成到信息系统 第一阶段 手稿
    flash > AMF > java 的对象映射关系
    我在想:也许.net的基因里面就输给了java
  • 原文地址:https://www.cnblogs.com/kmist/p/10645551.html
Copyright © 2011-2022 走看看