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(进程间共享属性))
  • 相关阅读:
    树的递归
    《计算机存储与外设》 3二级存储器
    《计算机存储与外设》 2主存储器
    《码农翻身:用故事给技术加点料》阅读有感
    分析"傍富婆发财"
    《第22条军规》Catch-22
    《编译原理》4
    《编译原理》3
    《血酬定律》
    linux下netcore程序部署
  • 原文地址:https://www.cnblogs.com/lnlin/p/9697231.html
Copyright © 2011-2022 走看看