美文网首页
互斥量与信号量

互斥量与信号量

作者: conowen | 来源:发表于2018-05-09 17:12 被阅读12次

互斥量 (Mutex)

在计算机科学中,锁是在执行多线程时用于强行限制资源访问的同步机制。

在iOS中,实现互斥量有多种方式,一般有

  • @synchronized 同步代码快
@synchronized(self) {
// task
}
  • NSLock 对象锁
  NSLock *mutexLock = [[NSLock alloc] init];
  [mutexLock lock];
  //task
  [mutexLock unlock];
  • NSRecursiveLock 递归锁
    NSLock在递归中容易产生死锁,使用NSRecursiveLock可以避免这个问题

  • NSConditionLock 条件锁
    满足预设的条件,就可以获取锁

  • OSSpinLock 自旋锁
    一般的互斥锁没有拿到锁之前,线程都会休眠,而自旋锁不会引起调用者线程休眠,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁。

  • pthread_mutex C语言实现的互斥锁

信号量(Semaphore)

信号量是一个同步对象,用于保持在0至指定最大值之间的一个计数值。当线程完成一次对该semaphore对象的等待(wait)时,该计数值(- 1);当线程完成一次对semaphore对象的释放(release)时,计数值(+ 1)。简单来说,信号量为0的时候,线程会阻塞,一直等待该信号量对象的计数值变成大于0的状态。

  dispatch_queue_t queue = 
  dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);//信号量初始为0
  dispatch_async(queue, ^{
      // task1
      dispatch_semaphore_signal(semaphore);// 使信号量+1并返回
  });
  dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
  // task2 
  //只有当task1执行完,信号量+1之后,才会执行这里

数值为N的信号量允许N个线程并发访问。

如果信号量是一个任意的整数,通常被称为计数信号量(Counting semaphore),或一般信号量(general semaphore);如果信号量只有二进制的0或1,称为二进制信号量(binary semaphore)。在linux系统中,二进制信号量(binary semaphore)又称互斥量(Mutex)。

所以说,互斥量和信号量本质上一样,都是用来表示对资源的访问权,但是互斥量表示资源某个时刻最多只能被一个线程占用,也就是资源计数最多是1,而信号量的资源计数可以超过1,即同时被多个线程占用。

两者对比的话,简单来说,

  • 互斥量就是N个线程,争夺一把锁,
  • 信号量就是N个线程,争夺M把锁,当信号量的计数值只有0、1(二进制信号量),那么M = 1,这时候,和互斥量的性质是一样的。

参考文章

https://zh.wikipedia.org/wiki/%E4%BF%A1%E8%99%9F%E6%A8%99

相关文章

  • RTOS基础(互斥信号量)

    互斥信号量的原理与创建 问题描述 设计原理 设计实现 互斥信号量的等待与通知 设计原理 互斥信号量的删除与状态查询...

  • Java并发编程——信号量与互斥量

    信号量用于线程同步,互斥量用户保护资源的互斥访问。 信号量与互斥量的区别 互斥量用于线程的互斥,信号线用于线程的同...

  • FreeRTOS学习笔记(5)——互斥量

    一、头文件 二、互斥量 2.1 基本概念 互斥量又称互斥信号量(本质是信号量),是一种特殊的二值信号量,它和信号量...

  • CRTOS——互斥信号量

    互斥信号量等待操作: 1、等待互斥信号量,互斥信号量未被占有(锁定次数为0),占有过程中将信号量拥有者指向任务,并...

  • 第二章 信号量机制

    3)信号量的基本应用:实现进程互斥; 实现进程间的前趋关系(有序) *互斥信号量注意点: 1.互斥信号量mutex...

  • 2-3进程同步(信号量)

    信号量是什么? 信号量的基本应用 实现多个进程互斥(注意点) (1)互斥信号量mutex初值为1; (2)每个进程...

  • 信号量 VS 互斥量

    互斥量和信号量的区别

  • 信号量与互斥量

    本文转载自信号量与互斥锁,如有侵权,请及时联系博主删除。 1. 信号量与普通整型变量的区别: ①信号量(semap...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • 操作系统:信号量与管程

    第10章:信号量与管程 信号量信号量使用互斥访问条件同步管程经典同步问题哲学家就餐问题读者-写者问题 10.1 信...

网友评论

      本文标题:互斥量与信号量

      本文链接:https://www.haomeiwen.com/subject/uwwnrftx.html