- 1、本文档共34页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
PAGE1
PAGE1
操作系统同步与互斥基础
1并发与并行的概念
在计算机科学中,并发和并行是两个经常被提及的概念,它们描述了系统处理多个任务的能力,但含义不同。
1.1并发
并发是指多个任务在宏观上同时进行,但实际上这些任务可能在微观上交替执行。在操作系统中,当多个进程或线程被设计为可以同时开始、运行和完成时,我们说它们是并发的。操作系统通过调度机制在多个任务之间切换,使得每个任务看起来都在同时运行,但实际上,它们是在CPU时间片之间交替执行的。
1.2并行
并行是指多个任务在微观上同时进行,即它们在物理上同时执行。这通常需要多个处理器或核心来实现。在多核处理器的系统中,不同的任务可以被分配到不同的核心上,实现真正的并行执行。
1.3示例
假设我们有一个简单的多线程程序,其中两个线程分别执行打印操作。在并发执行的场景下,这两个线程看起来同时运行,但实际上它们可能在CPU时间片之间交替执行。
importthreading
defprint_numbers():
foriinrange(1,6):
print(fThread1:{i})
defprint_letters():
forletterinABCDE:
print(fThread2:{letter})
#创建线程
thread1=threading.Thread(target=print_numbers)
thread2=threading.Thread(target=print_letters)
#启动线程
thread1.start()
thread2.start()
#等待线程完成
thread1.join()
thread2.join()
在这个例子中,print_numbers和print_letters函数分别在两个线程中执行。由于线程的调度,输出可能交错,但每个线程的执行看起来是连续的,这就是并发的体现。
2进程与线程的同步问题
在多进程或多线程的环境中,同步问题变得尤为重要。当多个进程或线程访问共享资源时,如果没有适当的同步机制,可能会导致数据不一致、死锁、饥饿等问题。
2.1数据不一致
当多个线程或进程同时修改同一份数据时,如果没有同步,可能会导致数据的不一致。例如,两个线程同时对一个变量进行递增操作,如果没有适当的锁机制,最终的结果可能小于预期。
2.2死锁
死锁是指两个或多个进程或线程在执行过程中,因争夺资源而造成的一种僵局,每个进程或线程都在等待别的进程或线程释放资源,而别的进程或线程又在等待当前进程或线程释放资源,导致所有进程或线程都无法继续执行。
2.3饥饿
饥饿是指一个或多个进程或线程由于资源分配策略不当,导致它们长时间无法获得所需资源,无法继续执行。
2.4解决方案
操作系统提供了多种同步机制来解决这些问题,包括信号量、互斥锁、条件变量等。
2.4.1信号量
信号量是一种用于控制多个进程或线程对共享资源访问的机制。它是一个计数器,可以防止过多的进程或线程同时访问共享资源。当一个进程或线程想要访问共享资源时,它会先尝试减小信号量的值。如果信号量的值大于零,进程或线程可以继续执行并减小信号量的值。如果信号量的值为零,进程或线程将被阻塞,直到信号量的值再次变为正数。
2.4.2互斥锁
互斥锁是一种用于确保同一时间只有一个进程或线程可以访问共享资源的机制。当一个进程或线程获得互斥锁后,其他试图获得该锁的进程或线程将被阻塞,直到锁被释放。
2.4.3条件变量
条件变量是一种用于线程间通信的机制。它允许一个或多个线程等待某个条件成立,然后继续执行。当条件满足时,一个线程可以唤醒等待该条件的其他线程。
2.5示例
下面是一个使用Python的threading模块中的Lock对象来实现线程同步的例子。在这个例子中,我们有两个线程,它们共享一个计数器变量。我们使用锁来确保每次只有一个线程可以修改计数器。
importthreading
#创建一个锁对象
counter_lock=threading.Lock()
#共享变量
counter=0
defincrement_counter():
globalcounter
for_inrange(100000):
withcounter_lock:
counter+=1
#创建线程
thread1=threading.Thread(target=increment_counter)
thread2=threading.Thread(target=increment
您可能关注的文档
- 软件工程-基础课程-操作系统_操作系统概述与历史.docx
- 软件工程-基础课程-操作系统_操作系统结构与类型.docx
- 软件工程-基础课程-操作系统_操作系统性能分析与优化.docx
- 软件工程-基础课程-操作系统_存储器层次结构与缓存管理.docx
- 软件工程-基础课程-操作系统_进程管理.docx
- 软件工程-基础课程-操作系统_进程间通信.docx
- 软件工程-基础课程-操作系统_内存管理.docx
- 软件工程-基础课程-操作系统_嵌入式操作系统.docx
- 软件工程-基础课程-操作系统_实时操作系统.docx
- 软件工程-基础课程-操作系统_死锁.docx
- 2024年中国钽材市场调查研究报告.docx
- 2024年中国不锈钢清洗车市场调查研究报告.docx
- 2024年中国分类垃圾箱市场调查研究报告.docx
- 2024年中国水气电磁阀市场调查研究报告.docx
- 2024年中国绿藻片市场调查研究报告.docx
- 2010-2023历年初中毕业升学考试(青海西宁卷)数学(带解析).docx
- 2010-2023历年福建厦门高一下学期质量检测地理卷.docx
- 2010-2023历年初中数学单元提优测试卷公式法(带解析).docx
- 2010-2023历年初中毕业升学考试(山东德州卷)化学(带解析).docx
- 2010-2023历年初中毕业升学考试(四川省泸州卷)化学(带解析).docx
最近下载
- 宜兴市各级文物保护单位一览表.docx
- 国学《千字文》之《渠荷的历》个人原创课件公开课课件.pptx VIP
- 老旧小区改造工程项目可行性研究报告.docx VIP
- 《GB∕T 45003-2024职业健康安全管理 工作中的心理健康安全:管理社会心理风险 指南》解读和应用指导材料(2024A0-雷泽佳).docx VIP
- 妙事多音乐--张老师 -培训讲解.ppt
- 基础化学高职高专第五版高琳第十章氧化还原平衡.pptx
- 在线网课学习课堂《英语视听说(西京学院 )》单元测试考核答案.docx
- 电子商务平台商家入驻协议书模板.doc
- 北京四中2023学年度上学期初中九年级期中考试物理试卷.docx
- 自然教育研学方案.pptx
文档评论(0)