内核学习——4、并发、竞争、同步与互斥

2024-06-20 16:20

本文主要是介绍内核学习——4、并发、竞争、同步与互斥,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

linux中四种进程或线程同步互斥的方法:

1、临界区:多线程串行化访问公共资源的一段代码
2、互斥量:互斥对象只有一个
3、信号量:控制一个有限数量的用户资源,进程上下文,适合长时间访问共享资源情况
4、自旋锁:适合短时间访问共享资源情况
5、事件:通知线程有一些事件已经发生,从而启动后面任务的开始

1、临界区:atomic

某一时刻只有一个线程能访问关键数据的简便方法。原子操作共享资源。临界区外的线程会被挂起进入等待状态,会影响性能,所以不允许其运行事件太长

2、互斥量:mutex_lock

只有拥有互斥对象(即互斥量)的线程才具有访问共享资源的权限,互斥量只有一个,所以不能被多个线程同时访问
同应用不同线程可以使用共享,不同应用程序间的线程之间也可以使用它来共享

3、信号量:semaphore,down、up

信号允许多个线程同时使用共享资源,和操作系统中PV操作相同,它有同时访问共享资源线程的最大数目,可以使等待资源进程进入休眠状态
信号量S是个整数:
P操作申请资源:
S减1,若减1之后仍大于等于0,则进程继续执行,若减1之后小于0,该进程被阻塞到信号对应的队列中,然后转入进程调度
V操作释放资源:
S加1,相加之后大于0,进程继续执行,若相加之后小于等于0,从信号等待队列中唤醒一个等待进程,然后再返回原进程继续执行或转入进程调度

4、自旋锁:spin_lock

保护共享资源,实现线程同步。若是某线程没有获得锁时会不断的询问和判断自旋锁持有者是否释放了锁,阻塞了,CPU空转

5、事件:

事件对象也可以通过通知操作方式保持线程同步。并可以实现不同进程中的线程同步操作

这篇关于内核学习——4、并发、竞争、同步与互斥的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1078640

相关文章

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

新特性抢先看! Ubuntu 25.04 Beta 发布:Linux 6.14 内核

《新特性抢先看!Ubuntu25.04Beta发布:Linux6.14内核》Canonical公司近日发布了Ubuntu25.04Beta版,这一版本被赋予了一个活泼的代号——“Plu... Canonical 昨日(3 月 27 日)放出了 Beta 版 Ubuntu 25.04 系统镜像,代号“Pluc

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

Nginx实现高并发的项目实践

《Nginx实现高并发的项目实践》本文主要介绍了Nginx实现高并发的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用最新稳定版本的Nginx合理配置工作进程(workers)配置工作进程连接数(worker_co

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操