互斥锁和条件变量(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);
根据共享变量的状态来觉得是否要等待,而为了不永远等待下去所以必须要在lock/unlock
队中
#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(进程间共享属性))
互斥锁和条件变量(pthread)相关函数的更多相关文章
- Linux互斥锁、条件变量和信号量
Linux互斥锁.条件变量和信号量 来自http://kongweile.iteye.com/blog/1155490 http://www.cnblogs.com/qingxia/archive/ ...
- node源码详解(七) —— 文件异步io、线程池【互斥锁、条件变量、管道、事件对象】
本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource7 本博客同步在https://cnodejs.o ...
- 非常精简的Linux线程池实现(一)——使用互斥锁和条件变量
线程池的含义跟它的名字一样,就是一个由许多线程组成的池子. 有了线程池,在程序中使用多线程变得简单.我们不用再自己去操心线程的创建.撤销.管理问题,有什么要消耗大量CPU时间的任务通通直接扔到线程池里 ...
- linux 线程的同步 二 (互斥锁和条件变量)
互斥锁和条件变量 为了允许在线程或进程之间共享数据,同步时必须的,互斥锁和条件变量是同步的基本组成部分. 1.互斥锁 互斥锁是用来保护临界区资源,实际上保护的是临界区中被操纵的数据,互斥锁通常用于保护 ...
- linux 互斥锁和条件变量
为什么有条件变量? 请参看一个线程等待某种事件发生 注意:本文是linux c版本的条件变量和互斥锁(mutex),不是C++的. mutex : mutual exclusion(相互排斥) 1,互 ...
- linux c 线程间同步(通信)的几种方法--互斥锁,条件变量,信号量,读写锁
Linux下提供了多种方式来处理线程同步,最常用的是互斥锁.条件变量.信号量和读写锁. 下面是思维导图: 一.互斥锁(mutex) 锁机制是同一时刻只允许一个线程执行一个关键部分的代码. 1 . ...
- 线程私有数据TSD——一键多值技术,线程同步中的互斥锁和条件变量
一:线程私有数据: 线程是轻量级进程,进程在fork()之后,子进程不继承父进程的锁和警告,别的基本上都会继承,而vfork()与fork()不同的地方在于vfork()之后的进程会共享父进程的地址空 ...
- 进程间通信机制(管道、信号、共享内存/信号量/消息队列)、线程间通信机制(互斥锁、条件变量、posix匿名信号量)
注:本分类下文章大多整理自<深入分析linux内核源代码>一书,另有参考其他一些资料如<linux内核完全剖析>.<linux c 编程一站式学习>等,只是为了更好 ...
- 【转载】同步和互斥的POSIX支持(互斥锁,条件变量,自旋锁)
上篇文章也蛮好,线程同步之条件变量与互斥锁的结合: http://www.cnblogs.com/charlesblc/p/6143397.html 现在有这篇文章: http://blog.cs ...
随机推荐
- loj2143 「SHOI2017」组合数问题
大傻逼题--就是求 \(nk\) 个元素选出一些元素,选出的元素的个数要满足模 \(k\) 余 \(r\),求方案数. 想到 \(\binom{n}{m}=\binom{n-1}{m-1}+\bino ...
- Eclipse截取android报错log
Eclipse截取android报错log: 1.前提条件:已安装eclipse 2. LogCat界面设置: Logcat是Android 编程中一个命令行工具,可以用于得到程序的 log 信息,可 ...
- Leetcode 396.旋转函数
旋转函数 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * Bk[0] ...
- Leetcode 335.路径交叉
路径交叉 给定一个含有 n 个正数的数组 x.从点 (0,0) 开始,先向北移动 x[0] 米,然后向西移动 x[1] 米,向南移动 x[2] 米,向东移动 x[3] 米,持续移动.也就是说,每次移动 ...
- 在windows下安装flex和bison、GCC
学习Stellar-core 需要依赖项flex .bison .gcc三个依赖项 下载得网址:链接: https://pan.baidu.com/s/1mitCLcs 密码: 3jaj 通过 w ...
- web文件上传大小限制
最近在项目中遇到上传文件,对上传文件的大小需要进行限制,这里学习和整理了一下一些常规的文件大小限制的方法. 一般分为两种方式,一种是服务器端判断文件大小进行限制,这种方法的存在明显的缺陷,当用户过多后 ...
- Codeforces787D - Legacy
Description \(n(n\leq10^5)\)个点构成的有向图,有\(m(m\leq10^5)\)条连通信息,信息有三种: 1 u v w,表示存在一条边权为\(w\)的有向边\((u,v) ...
- 【图论】bnuoj 52810 Splitting the Empire
acm.bnu.edu.cn/v3/contest_show.php?cid=9208#problem/G [题意] 给定一个无向图,要求把这个无向图的点划分到不同的集合里,使得每个集合的点之间两两没 ...
- Spoj-ANTP Mr. Ant & His Problem
Mr. Ant has 3 boxes and the infinite number of marbles. Now he wants to know the number of ways he c ...
- Linux(10):期中架构(2)--- NFS存储服务 & 实时同步
1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. ...