首页 > 其他分享 >8. Mutex Locks互斥锁

8. Mutex Locks互斥锁

时间:2024-04-24 19:56:16浏览次数:24  
标签:Locks lock section 互斥 临界 critical Mutex 进程

临界区问题(critical-section problem)

  1. Each concurrent(并发) process has a segment of code ,called a critical section,in which the process may be changing common variables(公共数据),updating a table ,wrinting a file ,and so on.
  2. The important feature of the system is that ,when one process is executing in its critical section section no other process is allowed to execute in its critical section.That is,NO two processes are executing in their critical sections at the same time.
  • 这句话的意思是,系统的一个重要特性是,当一个进程在其关键区域(critical section)执行时,不允许其他进程进入其关键区域执行。也就是说,没有两个进程会同时在各自的关键区域内执行。关键区域是指一个进程访问共享资源(例如共享文件或共享内存)的那部分代码,系统确保在任何时候,只有一个进程可以执行在关键区域内的代码,以防止数据冲突或不一致性。
  1. The critical-section problem is to design a protocol(协议) that the processes can use to cooperate(协作).
  2. 进程进出临界区协议
  • 进入临界区前再entry section要请求许可。
  • 离开临界区后再exit section要归还许可。
  1. 临界区管理准则
  • Mutual exclusion(Mutex):互斥,
  • Progress:前进,在上面这个图中,只有一个p可以进入到临界区(这个动作就是前进)。
  • Bounded waiting:有限等待。只可以从中选一个,并且当临界区有进程就无法进入。就要等待但不是无限的等待。

喂养金鱼

  1. 并发执行有两种现象:顺序执行,交替执行,这里的交替执行是需要注意的。
  2. 使用软件解决临界区管理
  • 实现需要较高的编程技巧
  • 两个进程的实现代码是不对称的,当处理超过2哥进程的时候,代码的复杂度会变得更大。

互斥锁

  1. mutex locks
  • Operating-systems designers build software tools to solve the critical-section problem. The simplest of these tool is the mutex lock.(操作系统设计者构建软件工具来解决临界区问题。其中最简单的工具是互斥锁。)
    • A process must acquire the lock before entering a critical section;
    • It must release the lock when it exits the critical section
  1. 锁的基本操作
  • 上锁
    • 等待锁至打开状态。
    • 获得锁并锁上
  • 解锁
  • 原子操作
    • Atomic operations mean the operation can NOT be interrupted while it's running.(原子操作意味着在其运行时无法被中断)
    • 原子操作(原语)是操作系统重要的组成部分,下面2条硬件指令都是原子操作,他们可以被用来实现对临界区的管理(也就是‘锁’)
      • test_and_set();
      • compare_and_swap()
  1. 锁的实现
  • test_and_set
bool ts(bool* target){
  bool result =*target;
  *target=false;
  return result;
}

bool available=true;
lock(){
  while(!ts(&available)) do nothing;
}

unlock(){
  available= true;
}
  • ts函数设置是原子操作,就是在运行时候不可中断的.
  • test_and_set,测试并设置,是这个的精髓。ts的返回值是availble的值,并都修改为false。当availble初始为true时候,就跳出while循环进入临界区并修改availble为false,那么其他线程就会进入到while循环,只有当执行到unlock(),available修改为true。
  1. 忙式等待(busy waiting)
  • 忙式等待是指占用CPU执行空循环实现等待
  • 这种类型的互斥锁也被称为‘自旋锁’(spin lock)
  • 缺点:浪费CPU周期,可以将进程插入等待队列以让出CPU的使用权;
  • 优点:进程在等待时没有上下文切换,对于使用锁时间不长的进程,自旋锁还是可以接受的;在多处理器系统中,自旋锁的优势更加明显

标签:Locks,lock,section,互斥,临界,critical,Mutex,进程
From: https://www.cnblogs.com/zhudachang/p/18156195

相关文章

  • 忙等待互斥——Peterson解法
    ANSIC编写的Peterson解法抽象化表示如下:其中,turn是共享资源,两进程会进行抢夺。intertest[2]看似是共享资源,但intertst[0]只被进程1修改,intertst[1]只被进程2修改,可看作他们的私有资源。该算法核心原理是:“每个进程在进入临界区之前,只会修改turn1次”。假设1:线程1进入临界区......
  • WPF implemented Single Instance via mutex and activated the existed window via
    1.RemoveStartUri="MainWindow.xaml"inApp.xaml;2.IntheApp.xaml.cs,overriveasbelowusingSystem;usingSystem.Collections.Generic;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Runtime.InteropServices;usin......
  • Go 语言中 sync.Mutex 的实现
    锁的获取和释放模式先理解两种不同的锁的获取和释放模式"Barging"和"Handoff",它们影响着等待锁的goroutines的行为。Barging(插队)在Barging模式下,当一个锁被释放时,任何尝试获取该锁的goroutine都有机会立即抢占("插队")并尝试获取锁,而不管是否有其他goroutines正在等待......
  • windmill Airplane&Superblocks&Retool&Prefect&Airflow 可选工具
    现在调度工具是越来越多了,而且集成的能力也越来越强大了windmill是一个很不错的workflow调度平台功能很强大特性可扩展的执行runtime,支持跨语言代码执行强大的调度器,支持基于低代码以及yaml模式通过appbuilder使用低代码或者js框架开发面向数据的dashboards智能依赖以......
  • Golang 中 在gmp下,mutex 是如何并发的
    在Go语言的并发模型中,GMP(Goroutine、Machine、Processor)模型是核心概念,其中Mutex(互斥锁)扮演着关键的角色,用于同步并发访问共享资源,防止数据竞争和不一致性问题。以下是Mutex在GMP模型下实现并发的详细解释:Goroutines(协程)轻量级的线程:Goroutines是Go语言中的轻量级线程,它......
  • 多线程(2)-线程同步互斥锁Mutex
    在Linux多线程编程中,互斥锁(Mutex)是一种常用的同步机制,用于保护共享资源,防止多个线程同时访问导致的竞争条件。在POSIX线程库中,互斥锁通常通过pthread_mutex_t类型表示,相关的函数包括pthread_mutex_init、pthread_mutex_lock、pthread_mutex_unlock等。 下面为一个demo,......
  • Linux启动报错:clean ... file ... blocks 或 recovering journal
    先说原因:根目录内存满了如何解决:首先进入命令行界面:按照网上的操作方法主要是这种:Ctrl+Alt+F4我不是这种方式进入的,我的是:Alt+F4进入之后会让你输入账号密码,但是我只有四秒钟时间输入(不知道怎么会有这种逆天设置),很难一次搞定,极其麻烦。而且可能出现密码太长输不完的情......
  • 互斥量(优先级翻转)
    这里只是总结,大部分内容来自野火FreeRTOS教程。 互斥量正常可用于资源保护,这里很清晰,不多讲 而比较重要的是优先级继承机制。 互斥量与二值信号量最大的不同是:互斥量具有优先级继承机制,而信号量没有。 也就是说,某个临界资源受到一个互斥量保护,如果这个资源正在被一......
  • 操作系统概念-进程管理-同步互斥camproj
    操作系统概述操作系统定义:能有效的组织和管理系统中的各种软/硬件资源,合理的组织计算机系统工作流程,控制程序的执行,并且向用户提供一个良好的工作环境和友好的接口。操作系统有两个重要的作用:通过资源管理提高计算机系统的效率;改善人机界面向用户提供友好的工作环境。操......
  • 2.3 同步与互斥
    123456789101112......