IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 线程间通信 -> 正文阅读

[C++知识库]线程间通信

线程是操作系统调度的最小单位,当多个线程需要共同操作同一共享资源时,需要同步状态避免引起共享资源竞争和不可预知的结果

  • 条件变量
    变量是线程间共享全局变量进行同步的一种机制,访问共享资源时先加锁,条件不满足时等待触发(先解锁后再挂起,不占用CPU),等待其他线程激活后再加锁使用共享资源
    初始化条件变量:
    int pthread_cond_init(pthread_cond_t *cond,pthread_condattr_t *cond_attr);
    循环和计时等待:
    int pthread_cond_wait(pthread_cond_t *cond,pthread_mutex_t *mutex);
    int pthread_cond_timewait(pthread_cond_t *cond,pthread_mutex *mutex,const timespec *abstime);
    激活单个和所有线程:
    int pthread_cond_signal(pthread_cond_t *cond);
    int pthread_cond_broadcast(pthread_cond_t *cond);
    销毁条件变量:
    int pthread_cond_destroy(pthread_cond_t *cond);

  • 互斥锁
    互斥锁是同一时刻只允许一个线程执行锁中的代码
    初始化锁:
    int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutex_attr_t *mutexattr);
    阻塞和非阻塞加锁:
    int pthread_mutex_lock(pthread_mutex *mutex);
    int pthread_mutex_trylock( pthread_mutex_t *mutex);
    解锁:
    int pthread_mutex_unlock(pthread_mutex *mutex);
    销毁锁:
    int pthread_mutex_destroy(pthread_mutex *mutex);

  • 自旋锁
    自旋锁类似互斥锁,区别为在锁被其他线程持有时会持续的获取锁状态
    优点:一直处于用户态,不进行睡眠和线程上下文切换,执行效率高(互斥锁涉及内核调度线程上下文切换)
    缺点:循环时间长的话过度消耗cpu资源,影响其他线程的cpu资源使用
    特点:在内核中,被自旋锁保护的代码执行中不能睡眠,单核处理器下会死锁,多核中两个线程在同一处理器下也可能死锁,所以现在的处理器都会设置自旋时间上限防止死锁,另外自旋锁在单核非抢占式cpu是无效的,在单核抢占式cpu禁止内核抢占并不实现自旋,在多核可抢占cpu为禁止内核抢占且可自旋
    初始化和销毁锁:
    int pthread_spin_init(pthread_spinlock_t *lock, int pshared);
    int pthread_spin_destroy(pthread_spinlock_t *lock);
    加锁和解锁:
    int pthread_spin_lock(pthread_spinlock_t *lock);
    int pthread_spin_trylock(pthread_spinlock_t *lock);
    int pthread_spin_unlock(pthread_spinlock_t *lock);

  • 读写锁
    读写锁是同一时刻只允许多个读者或者一个写者执行锁中的代码
    初始化:
    int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);
    加解锁:
    int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);
    int pthread_rwlock_wrlock(pthread_rwlock_t *rwlock);
    int pthread_rwlock_unlock(pthread_rwlock_t *rwlock);
    int pthread_rwlock_tryrdlock(pthread_rwlock_t *rwlock);
    int pthread_rwlock_trywrlock(pthread_rwlock_t *rwlock);
    销毁锁:
    int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);

  • 信号量
    线程间和进程间一样,也可以使用信号量进行信息同步
    初始化:
    int sem_init (sem_t *sem , int pshared, unsigned int value);
    增加信号量值,v操作
    int sem_post(sem_t *sem);
    减少信号量值,p操作
    int sem_wait(sem_t *sem);
    销毁信号量:
    int sem_destroy(sem_t *sem);

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:27:40  更:2022-04-07 22:29:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:17:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码