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);

最新文章

  1. js通过注册表找到本地软件安装路径并且执行
  2. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(九)地图定位模块
  3. Mysql查看版本,端口命令
  4. tiny java web server
  5. JS 弹出层
  6. select的5中子句where,group by, havaing, order by, limit的使用顺序及实例
  7. oracle冷备份后恢复
  8. WebDriver - 添加失败截图
  9. UVA 11354 Bond(最小瓶颈路+倍增)
  10. 使用SQLServer Audit来监控触发器的启用、禁用情况
  11. Python笔记·第九章—— 函数 (一)
  12. C#-----类DateTime的常用方法
  13. Centos7下面配置客户端OpenVPN
  14. C++使用libcurl
  15. django之ModelForm的用法
  16. Request processing failed; nested exception is java.lang.IllegalStateException: getOutputStream() has already been called for this response
  17. linux mysql主从复制
  18. MySQL建立索引,触发器
  19. java文件下载以及中文乱码解决
  20. 自己动手破解rar密码-ruby脚本实现

热门文章

  1. Elasticsearch 2.x.x版本如何安装bigdesk
  2. 来自Google资深工程师的API设计最佳实践
  3. 浅聊IOC
  4. 【转】2013 PHP技术峰会《Bug Free的PHP开发实践分享》摘录
  5. VGG使用重复元素的网络
  6. new ,malloc
  7. MacBook常用快捷键
  8. Multicast Routing
  9. Kubernetes组件与架构
  10. Python的多进程