Content
5 Lessons • 0 Quizzes • 0 Challenges
基础
- 1
简介
- 2
程序、进程与线程
- 3
并发与并行
- 4
协作式多任务与抢占式多任务
- 5
同步与异步
- 6
I/O 密集型与 CPU 密集型
- 7
吞吐量与延迟
- 8
临界区与竞态条件
- 9
死锁、活跃性与可重入锁
- 10
互斥锁(Mutex)与信号量(Semaphore)都是用于多线程编程中控制对共享资源访问的同步机制,但它们在用途和行为上存在关键区别: **互斥锁(Mutex)** - 用于保护临界区,确保同一时间只有一个线程可以访问共享资源。 - 通常具有“所有权”概念:只有获取锁的线程才能释放它。 - 一般初始值为1,表示资源可用。 - 适用于需要独占访问的场景,如修改共享变量或写入文件。 **信号量(Semaphore)** - 是一种更通用的同步工具,用于控制对多个相同资源的访问。 - 可以设置一个计数值(如5),表示最多允许多少个线程同时访问资源。 - 不具备所有权:任何线程都可以通过P(等待)和V(释放)操作来改变信号量状态。 - 适用于资源池管理,如数据库连接池、线程池等。 **核心区别** - 互斥锁是二进制信号量的一种特例(计数为1),而信号量可以支持大于1的计数值。 - 互斥锁强调“独占”,信号量强调“数量限制”。 - 互斥锁通常用于保护单一资源,信号量用于协调多个资源的使用。 简而言之: - 使用互斥锁当你要确保只有一个线程能进入某个代码段。 - 使用信号量当你要允许多个线程同时访问,但不超过指定数量。
- 11
互斥锁(Mutex)与监视器(Monitor)
- 12
霍尔监视器与梅萨监视器
- 13
信号量与监视器
- 14
阿姆达尔定律
- 15
摩尔定律
API 概述
- 1
使用线程
- 2
线程池与线程中止(concept)
- 3
线程异常与闭包捕获(checkpoint)
- 4
互斥锁
- 5
信号量
- 6
Interlocked
- 7
等待句柄
- 8
监控
- 9
... 继续
- 10
lock 语句
- 11
自旋锁与自旋等待
- 12
屏障
- 13
CountdownEvent
- 14
ThreadLocal
- 15
任务
- 16
原子性
- 17
内存模型
- 18
重排序示例续篇(concept)
- 19
获取-释放语义
- 20
易变的
- 21
重排序总结(summary)
异步编程简介
- 1
简介
- 2
异步/等待
- 3
继续:返回值与 Task.WhenAll
- 4
可等待的
- 5
继续:Task.Run 与 TaskCompletionSource
- 6
注意事项
- 7
测验
面试练习题
- 1
阻塞队列 | 有界缓冲区 | 生产者-消费者
- 2
... 继续
- 3
... 继续
- 4
使用令牌桶算法进行限流
- 5
线程安全的延迟回调
- 6
实现信号量
- 7
实现 AutoResetEvent
- 8
读写锁
- 9
男女共用卫生间问题
- 10
实现一个屏障
- 11
Uber 乘车问题
- 12
哲学家就餐问题
- 13
理发店
- 14
超人问题
- 15
多线程归并排序
- 16
异步转同步问题
结束
- 1
尾声
Certificate of Completion
Showcase your accomplishment by sharing your certificate of completion.
Course Author:Anonymous User