zoukankan      html  css  js  c++  java
  • 互斥锁和条件变量(pthread)相关函数

    互斥锁

    #include <pthread.h>
    
    // 若成功返回0,出错返回正的Exxx值
    // mptr通常被初始化为PTHREAD_MUTEX_INITIALIZER
    int pthread_mutex_lock(pthread_mutex_t *mptr);
    
    int pthread_mutex_trylock(pthread_mutex_t *mptr);   // pthread_mutex_lock 函数的非阻塞模式
    
    int pthread_mutex_unlock(pthread_mutex_t *mptr);

    条件变量:

    #include <pthread.h>
    
    // 以下两个函数使用条件变量
    // 若成功返回0,出错返回正的Exxx值
    // cptr通常被初始化为PTHREAD_COND_INITIALIZE
    int pthread_cond_signal(pthread_cond_t *cptr);  // cptr指条件变量的类型
    
    int pthread_cond_wait(pthread_cond_t *cptr, pthread_munex_t *mptr);
    pthread_cond_wait必须放在pthread_mutex_lockpthread_mutex_unlock之间,因为他要
    根据共享变量的状态来觉得是否要等待,而为了不永远等待下去所以必须要在lock/unlock
    队中
    pthread_cond_signal通常唤醒等在相应条件变量上的单个进程
    #include <pthread.h>
    
    // 若成功返回0,出错返回正的Exxx值
    int pthread_cond_broadcast(pthread_cond_t *cptr);  // 唤醒在相应条件变量上的所有线程
    
    int pthread_cond_timewait(pthread_cond_t *cptr, pthread_munex_t *mptr,  // 允许线程设置一个阻塞时间限制
                              const struct timespec *abstime);     
    // abstime指的是绝对时间,而不是一个时间增量
    // abstime通常调用gettimeofday获取当前时间,将其复制到timespec结构中,再加上期望的时间限制

    互斥锁和条件变量的属性:

    #include <pthread.h>
    
    // 使用非默认属性初始化互斥锁和条件变量,摧毁使用非默认属性初始化的互斥锁和条件变量
    int pthread_mutex_init(pthread_mutex_t *mptr, const pthread_mutexattr_t *attr);
    
    int pthread_mutex_destory(pthread_mutex_t *mptr);
    
    int pthread_cond_init(pthread_cond_t *cptr, const pthread_condattr_t *attr);
    
    int pthread_cond_destory(pthread_cond_t *cptr);
    
    // 互斥锁的属性(pthread_mutexattr_t) 条件变量属性的数据类型(pthread_condattr_t)
    // 属性的初始化和摧毁
    // 若成功返回0,出错返回正的Exxx值
    int pthread_mutexattr_t_init(pthread_mutexattr_t *attr);
    
    int pthread_mutexattr_t_destory(pthread_mutexattr_t *attr);
    
    int pthread_condattr_t_init(pthread_condattr_t *attr);
    
    int pthread_condattr_t_destory(pthread_condattr_t *attr);
    
    // 获取/设置互斥锁和条件变量的属性
    // 若成功返回0,出错返回正的Exxx值
    int pthread_mutexattr_t_getpshared(const pthread_mutexattr_t *attr, int *valptr);
    
    int pthread_mutexattr_t_setpshared(pthread_mutexattr_t *attr, int value);
    
    int pthread_condattr_t_getpshared(pthread_condattr_t *attr, int *valptr);
    
    int pthread_condattr_t_setpshared(pthread_condattr_t *attr, int value);
    // value的取值(PTHREAD_PROCESS_PRIVATE或PTHREAD_PROCESS_SHARED(进程间共享属性))
  • 相关阅读:
    产品列表
    PHP全栈学习笔记5
    PHP全栈学习笔记5
    PHP全栈学习笔记4
    更新YUM源后的arning: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY错误
    监听EditText输入完成
    关于PHP接收HTTP模拟POST传JSON格式时$_POST为空的问题
    安卓时间类型的转换和比大小
    Android之观察者/被观察者模式Observer/Observable
    WKWebView--JS调用OC的方法
  • 原文地址:https://www.cnblogs.com/lnlin/p/9697231.html
Copyright © 2011-2022 走看看