浅谈并行程序设计中互斥量(Pthreads Mutexes)与信号量(Semaphores)的区别
来源:互联网 发布:360便签软件 编辑:程序博客网 时间:2024/05/20 05:07
出于对忙等待(busy-waiting)的优化,我们有两种更好的办法:互斥量和信号量。
互斥量
互斥量是互斥锁的简称,是一个特殊类型的变量,通过某些函数,互斥量可以用来限制每次只有一个线程进入临界区。
临界区:就是一个更新共享资源的代码段,一次只允许一个线程执行此代码段。
Pthread标准为互斥量提供了一个特殊类型:pthread_mutex_t,除了初始化函数和摧毁函数,在获取临界区的访问和退出临界区我们需调用
以用累加求和计算pai来示例互斥量用法
信号量
信号量类似于一种特殊类型的unsigned int变量,可以赋值为0、1、2…大多数情况只赋值为0和1,把这种信号量称为二元信号量。粗略地说,0可以类比于上了锁的互斥量,1对应于未上锁的互斥量。调用函数为
注意:信号量并不是Pthreads线程库的一部分,所以使用时要加上头文件
那么以生产者-消费者同步模型为例
那么两种方法有什么区别么?
敲黑板:信号量与互斥量最大的区别在于信号量是没有个体拥有权的,但是互斥量则更像每个线程私有的,互斥量必须由同一线程进行加锁和解锁,但是信号量却可以由一个线程释放,另一个线程得到。
信号量多用于多线程同步用的,将一个线程的某个动作就通过信号告诉别的线程完成同步功能。而互斥量则是用于多线程互斥用的,比如对共享资源的独自占用,那么别的线程就无法访问,直到此线程完成,其他的线程才可以进入这个资源。
另:互斥量和信号量的底层操作都是原子操作实现哒,故不会存在额外冲突。(详情也等期末考完再说吧哭哭祝期末考个好成绩)
阅读全文
0 0
- 浅谈并行程序设计中互斥量(Pthreads Mutexes)与信号量(Semaphores)的区别
- 《Win32多线程程序设计》(5)---信号量(Semaphores)
- semaphore与mutexes的区别
- 临界区(Critical Section),互斥量(Mutex),信号量(Semaphores),事件(Event) 的区别
- 多线程同步之Semaphores(信号量)
- Win32多线程之信号量(Semaphores)
- 《Win32多线程程序设计》(4)--- 互斥器(Mutexes)
- RabbitMQ(七)用RabbitMQ实现分布式系统里的信号量控制 -- Distributed Semaphores with RabbitMQ
- 并行与并发的区别(网摘)
- 我的并行计算之路(五)Pthreads共享内存编程
- CMSIS-RTOS 信号量的使用Using Semaphores
- 线程同步(互斥锁与信号量的作用与区别)
- 线程同步(互斥锁与信号量的作用与区别)
- 线程同步(互斥锁与信号量的作用与区别)
- 线程同步(互斥锁与信号量的作用与区别)
- 线程同步(互斥锁与信号量的作用与区别)
- 线程同步(互斥锁与信号量的作用与区别)
- 线程同步(互斥锁与信号量的作用与区别)
- jQuery 控制页面滚动条显示和隐藏
- 数学建模--Floyd算法
- webservice 自动生成客户端代码
- SDUT-1164 C语言实验——矩阵转置
- 自定义注解,判断带注解的类或属性是否符合条件
- 浅谈并行程序设计中互斥量(Pthreads Mutexes)与信号量(Semaphores)的区别
- SDUT-1185 C语言实验——求一个3*3矩阵对角线元素之和
- Controller->Service->Repository
- Activity 的4种启动模式
- 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8 or OpenCV 2.4.9组件结构全解析
- golang mysql SetMaxOpenConns SetMaxIdleConns
- 思科的私有协议
- PAT--1046. Shortest Distance
- SDUT-1522 对称矩阵的判定