UniMate AI

CSSE3610

计算机软件工程

2 学分难度

课程定位 CSSE3610(Concurrency: Theory and Practice)是 UQ 课程体系中兼顾理论与实践的一门难课程,核心目标是把“会看懂”升级为“会分析、会实现、会解释”。课程通常承担承上启下作用:前接基础概念,后接更高阶专题或项目。对准备走软件、数据、工程或研究路径的同学来说,这类课程的价值不只在分数,更在于建立可迁移的方法框架和稳定交付能力。 技术栈与学习内容 学习内容通常覆盖该方向的关键概念、方法与工具链,并通过练习或作业落实到具体场景。常见会使用 Python、R、MATLAB、C/C++ 或课程指定软件(以官方课纲为准)。课程强调的不只是“得到答案”,还包括假设条件、步骤完整性、结果解释与复现性。也就是说,你需要同时训练知识准确度、实现质量和表达清晰度。 课程结构 课程一般按周推进,前段搭建概念框架,中段进入题型训练与案例应用,后段做综合整合与评估冲刺。考核常见组合为 Quiz/Lab、作业、报告和期末评估。评分不仅看正确率,也看分析逻辑、书写/代码规范与结论表达。多数同学真正拉开差距的阶段在中后期:是否能持续输出,而不是临近截止日突击。 适合人群 适合希望夯实底层能力、提升问题拆解与建模能力、并改善学术或工程表达的同学。若你计划继续修读高阶课程,或希望在实习与求职中提升“把事情做对并讲清楚”的竞争力,这门课

Course decision

选课先看

先看考核重心、截止节奏和入门要求,再决定这门课是否适合你的学期安排。

考核总权重

100%

4 项考核

最高单项

30%

Assignment 1

期末考试

未注明

以官方 outline 为准

Hurdle

未列出

当前考核表没有 Hurdle 标记

What you learn

学完能做什么

学习成果来自官方 Unit Outline,关键词来自这门课的逐周主题。

课程能力关键词

课程定位与先修回顾核心概念导入关键方法III建模与分析实验与实现中期评估专题实践项目推进成果整理期末复盘

Syllabus

每周大纲

默认只展示每周独有的知识重点;节奏、考核、Tutorial 和避坑信息按需展开。

  1. 1

    Introduction to Concurrent Programming

    ### 📖 核心知识点:并发编程导论 课程介绍并发编程的动机和基本概念。学习 Concurrency vs Parallelism 的区别。理解 Process 和 Thread 的概念、创建和生命周期。学习并发编程面临的核心挑战:Race Condition、Deadlock、Starvation。 - **核心概念/公式**: Concurrency(逻辑同时)vs Parallelism(物理同时)、Thread 生命周期 (New→Runnable→Running→Blocked→Terminated)、Non-determinism ⏰ **本周节奏**: 难度 ⭐⭐⭐ | 预计投入 7h(Lecture 2h + Applied Class 1h + 自学 4h) 🎯 **考试关联**: Final Exam 会考并发基础概念和 Race Condition 的识别。 🧪 **Tutorial/Lab**: 编写简单的多线程程序,观察 Race Condition 的不确定行为。 📌 **作业关联**: Assignment 1 基于本课程的并发编程概念。 ⚠️ **易错点**: Concurrency 不等于 Parallelism(单核也可以并发);Race Condition 可能在多次运行中偶尔出现,不容易复现。

    课程定位与先修回顾
  2. 2

    Threads & Thread Management

    ### 📖 核心知识点:线程与线程管理 深入学习 Thread 的创建和管理。掌握 Java/Python 中线程的编程接口。学习 Thread Pool 的概念和优势。理解 Thread Safety 的含义和实现方法。 - **核心概念/公式**: Thread.start() vs Thread.run()(直接调用 run 不会创建新线程)、Thread Pool (ExecutorService)、Thread-local Storage ⏰ **本周节奏**: 难度 ⭐⭐⭐ | 预计投入 8h(Lecture 2h + Applied Class 1h + 自学 5h) 🎯 **考试关联**: 线程创建和管理的 API 使用是基础考点。 🧪 **Tutorial/Lab**: 实现多线程计算任务,比较单线程和多线程的性能差异。 📌 **作业关联**: Assignment 1 需要使用多线程编程。 ⚠️ **易错点**: 调用 run() 而非 start() 导致同步执行;线程创建过多导致资源耗尽;忘记 join() 等待线程结束就读取结果。

    核心概念导入
  3. 3

    Mutual Exclusion & Critical Sections

    ### 📖 核心知识点:互斥与临界区 学习 Critical Section Problem 的定义和解决方案。掌握 Mutual Exclusion 的四个要求:Mutual Exclusion、Progress、Bounded Waiting、No assumption about speed。学习 Peterson's Algorithm 和 Hardware Solutions (Test-and-Set, Compare-and-Swap)。 - **核心概念/公式**: Critical Section 的 Entry/Exit Protocol、Peterson's Algorithm 的两个变量 (flag[], turn)、Atomic Operations: CAS (Compare-And-Swap) ⏰ **本周节奏**: 难度 ⭐⭐⭐⭐ | 预计投入 9h(Lecture 2h + Applied Class 1h + 自学 6h) 🎯 **考试关联**: Critical Section 和 Peterson's Algorithm 是 Final Exam 的核心考点。需要能证明算法满足互斥性。 🧪 **Tutorial/Lab**: 实现 Peterson's Algorithm,验证其正确性。分析 CAS 操作的 ABA 问题。 📌 **作业关联**: 理解互斥机制是后续所有同步编程的基础。 ⚠️ **易错点**: Peterson's Algorithm 在现代多核 CPU 上需要 Memory Barrier 才能正确工作;CAS 的 ABA 问题容易忽略;忘记 Critical Section 应尽可能短。

    关键方法I
  4. 4

    Semaphores & Synchronization Primitives

    ### 📖 核心知识点:信号量与同步原语 学习 Dijkstra 的 Semaphore (信号量) 概念。掌握 Binary Semaphore(互斥锁)和 Counting Semaphore(资源计数)的使用。用 Semaphore 解决经典同步问题:Producer-Consumer、Readers-Writers、Dining Philosophers。 - **核心概念/公式**: P(wait/acquire) 和 V(signal/release) 操作、Binary Semaphore 实现 Mutex、Counting Semaphore 管理有限资源 ⏰ **本周节奏**: 难度 ⭐⭐⭐⭐⭐ | 预计投入 10h(Lecture 2h + Applied Class 1h + 自学 7h)🔥 高压周 🎯 **考试关联**: Semaphore 解决同步问题是 Final Exam 的高频考点。经典问题的解法必须掌握。 🧪 **Tutorial/Lab**: 用 Semaphore 实现 Producer-Consumer 和 Bounded Buffer 问题。 📌 **作业关联**: Assignment 1 可能涉及 Semaphore 的编程应用。 ⚠️ **易错点**: P 和 V 的顺序错误导致死锁;Counting Semaphore 初始值设置错误;在 Critical Section 内调用可能阻塞的操作。

    关键方法II
  5. 5

    Monitors & Condition Variables

    ### 📖 核心知识点:管程与条件变量 学习 Monitor (管程) 作为高级同步抽象。掌握 Condition Variable 的 wait() 和 signal()/notify() 操作。理解 Mesa-style vs Hoare-style Monitor 的区别。用 Monitor 重新实现经典同步问题。 - **核心概念/公式**: Monitor 的互斥进入保证、Condition Variable 的 wait/signal 语义、Mesa Monitor 中 signal 后等待者需要重新检查条件 (while loop) ⏰ **本周节奏**: 难度 ⭐⭐⭐⭐ | 预计投入 9h(Lecture 2h + Applied Class 1h + 自学 6h) 🎯 **考试关联**: Monitor 和 Condition Variable 的使用是考试重点。Mesa vs Hoare 的区别常考。 🧪 **Tutorial/Lab**: 用 Java synchronized + wait/notify 实现 Monitor-based 的 Bounded Buffer。 📌 **作业关联**: Monitor 是实际编程中最常用的同步机制。 ⚠️ **易错点**: Mesa Monitor 中必须用 while 而非 if 检查条件(signal 后条件可能被其他线程改变);忘记在 synchronized 块内调用 wait/notify 导致 IllegalMonitorStateException。

    建模与分析
  6. 6

    Deadlock: Detection, Prevention & Avoidance

    ### 📖 核心知识点:死锁的检测、预防与避免 系统学习 Deadlock 的四个必要条件 (Coffman Conditions): Mutual Exclusion, Hold & Wait, No Preemption, Circular Wait。掌握死锁预防(破坏四个条件之一)、死锁避免 (Banker's Algorithm)、死锁检测与恢复的策略。 - **核心概念/公式**: Coffman's 四个条件、Banker's Algorithm(Safe State 判断)、Resource Allocation Graph、Wait-for Graph 检测环 ⏰ **本周节奏**: 难度 ⭐⭐⭐⭐ | 预计投入 9h(Lecture 2h + Applied Class 1h + 自学 6h) 🎯 **考试关联**: Banker's Algorithm 的手工执行和 Safe State 判断是 Final Exam 的必考内容。 🧪 **Tutorial/Lab**: 手工执行 Banker's Algorithm,判断给定状态是否安全。分析 Resource Allocation Graph 中的死锁。 📌 **作业关联**: 死锁避免策略在并发系统设计中至关重要。 ⚠️ **易错点**: Banker's Algorithm 的 Available、Max、Allocation、Need 矩阵计算容易出错;检测 Safe Sequence 时遗漏某个可执行进程;实际编程中的 Lock Ordering 实施不一致。

    实验与实现
  7. 7

    Message Passing & Communication

    ### 📖 核心知识点:消息传递与通信 学习进程间通信 (IPC) 的消息传递模型。掌握 Synchronous (Blocking) vs Asynchronous (Non-blocking) Message Passing 的区别。学习 Channel-based Communication 和 Actor Model 的概念。 - **核心概念/公式**: Send/Receive 原语、Direct vs Indirect Communication、Buffered vs Unbuffered Channel、Actor Model 的 "no shared state" 原则 ⏰ **本周节奏**: 难度 ⭐⭐⭐ | 预计投入 8h(Lecture 2h + Applied Class 1h + 自学 5h) 🎯 **考试关联**: Message Passing 模型和 Channel 语义是考试内容。 🧪 **Tutorial/Lab**: 使用 Go/Java 的 Channel 机制实现 Producer-Consumer,对比与 Semaphore 方案的差异。 📌 **作业关联**: Assignment 2 可能涉及 Message Passing 编程。 ⚠️ **易错点**: Synchronous send 和 receive 必须同时就绪才能通信(容易死锁);忽略消息顺序保证导致逻辑错误;Channel buffer 满时的行为(阻塞 vs 丢弃)取决于实现。

    中期评估
  8. 8

    Concurrent Data Structures

    ### 📖 核心知识点:并发数据结构 学习线程安全的数据结构设计。掌握 Lock-based 和 Lock-free 两种并发数据结构的实现策略。学习 ConcurrentHashMap、ConcurrentLinkedQueue 等 Java 并发容器的设计原理。 - **核心概念/公式**: Coarse-grained vs Fine-grained Locking、Lock-free Queue (Michael-Scott Queue)、CAS-based 无锁算法、Linearizability 定义 ⏰ **本周节奏**: 难度 ⭐⭐⭐⭐ | 预计投入 9h(Lecture 2h + Applied Class 1h + 自学 6h) 🎯 **考试关联**: 并发数据结构的正确性分析和 Linearizability 概念可能出现在考试中。 🧪 **Tutorial/Lab**: 实现一个 Lock-free Stack 或 Queue,验证其线程安全性。 📌 **作业关联**: 并发数据结构是高性能系统设计的核心技能。 ⚠️ **易错点**: Fine-grained Locking 的加锁顺序不一致导致死锁;Lock-free 算法中 CAS 的 ABA 问题;忽略 Memory Visibility(Java 需要 volatile 或 happens-before 关系)。

    专题实践I
  9. 9

    Formal Models: CSP & Process Algebra

    ### 📖 核心知识点:形式化模型 - CSP与进程代数 学习 Communicating Sequential Processes (CSP) 作为并发系统的形式化规约语言。掌握 CSP 的基本语法:Events, Processes, Sequential Composition (→), Choice (□, ⊓), Parallel Composition (∥), Hiding (\)。理解 Trace Semantics 和 Refinement 的概念。 - **核心概念/公式**: CSP Process: STOP, SKIP, a→P、External Choice □ vs Internal Choice ⊓、Alphabetised Parallel: P [A∥B] Q、Traces 和 Failures 语义 ⏰ **本周节奏**: 难度 ⭐⭐⭐⭐⭐ | 预计投入 10h(Lecture 2h + Applied Class 1h + 自学 7h)🔥 高压周 🎯 **考试关联**: CSP 表达式的阅读和编写是 Final Exam 的重要考点。 🧪 **Tutorial/Lab**: 用 CSP 规约经典并发问题(Dining Philosophers),分析可能的 Deadlock。 📌 **作业关联**: Assignment 2 可能要求用 CSP 建模并分析并发系统。 ⚠️ **易错点**: External Choice 和 Internal Choice 的语义差异(External 由环境决定,Internal 由系统非确定选择);Parallel Composition 的同步规则(共同事件必须同步)。

    专题实践II
  10. 10

    Distributed Systems & Distributed Algorithms

    ### 📖 核心知识点:分布式系统与分布式算法 从共享内存并发扩展到分布式系统。学习分布式系统的基本挑战:Network Partitions, Latency, Partial Failure。掌握 Logical Clocks (Lamport Timestamps, Vector Clocks) 和 Distributed Mutual Exclusion (Ricart-Agrawala Algorithm)。 - **核心概念/公式**: Lamport Clock: C(a) < C(b) 若 a→b (happens-before)、Vector Clock: 精确捕获因果关系、CAP Theorem (Consistency, Availability, Partition Tolerance) ⏰ **本周节奏**: 难度 ⭐⭐⭐⭐ | 预计投入 9h(Lecture 2h + Applied Class 1h + 自学 6h) 🎯 **考试关联**: Logical Clock 的计算和分布式互斥算法是 Final Exam 的可能考点。 🧪 **Tutorial/Lab**: 手工计算 Lamport/Vector Timestamp,判断事件间的因果关系。 📌 **作业关联**: 分布式系统概念扩展了并发编程的视野。 ⚠️ **易错点**: Lamport Clock 只保证 a→b ⇒ C(a)<C(b),反过来不成立(可能是并发事件);Vector Clock 维度 = 进程数,消息传递时取 element-wise max。

    项目推进
  11. 11

    Parallel Programming Patterns

    ### 📖 核心知识点:并行编程模式 学习实用的并行编程模式。掌握 Fork-Join Parallelism、Map-Reduce 模式、Pipeline Parallelism。学习 Java 的 Fork/Join Framework 和 Stream Parallel API。了解 GPU 并行计算的基本概念。 - **核心概念/公式**: Fork-Join 的 Work-Stealing 调度、MapReduce: Map → Shuffle → Reduce、Amdahl's Law: Speedup ≤ 1/((1-p)+p/n) ⏰ **本周节奏**: 难度 ⭐⭐⭐ | 预计投入 8h(Lecture 2h + Applied Class 1h + 自学 5h) 🎯 **考试关联**: Amdahl's Law 的计算和并行模式的选择是可能的考题。 🧪 **Tutorial/Lab**: 用 Fork-Join 框架实现并行 Merge Sort,测量不同数据规模下的 Speedup。 📌 **作业关联**: Assignment 2 截止在即。 ⚠️ **易错点**: Amdahl's Law 的串行比例 (1-p) 估计不准确;Fork-Join 的任务粒度太细反而比串行慢(overhead);parallel stream 对共享状态有 side-effect 时行为不确定。

    成果整理
  12. 12

    Verification of Concurrent Programs & Review

    ### 📖 核心知识点:并发程序验证与课程总复习 学习并发程序的正确性验证方法。了解 Model Checking (如 SPIN/Promela) 的基本原理——通过穷举状态空间检测死锁和违反安全性的行为。课程总复习,重点串联同步机制→形式化模型→分布式算法的知识链。 - **核心概念/公式**: Safety Property (bad things never happen) vs Liveness Property (good things eventually happen)、Model Checking 的状态空间爆炸问题 ⏰ **本周节奏**: 难度 ⭐⭐⭐ | 预计投入 9h(Lecture 2h + Applied Class 1h + 自学 6h)📝 复习周 🎯 **考试关联**: Final Exam 覆盖全部 12 周内容。重点:同步问题求解 (30%)、CSP 形式化 (20%)、死锁分析 (20%)、分布式算法 (15%)、概念题 (15%)。 🧪 **Tutorial/Lab**: 做往年真题模拟,重点练习 Semaphore/Monitor 编程题和 CSP 分析题。 📌 **作业关联**: 所有作业已截止,专注备考。 ⚠️ **易错点**: 考试中 Semaphore 和 Monitor 的解题方法不要混用;CSP 的并行组合运算符语义需要记准;Banker's Algorithm 的手工计算步骤不要跳步。

    期末复盘

Assessment

考核结构

Lab / Quiz

实验或阶段测验。

20%

Assignment 1

中期作业,考察分析与实现能力。

30%

Assignment 2 / Project

综合项目作业,强调方案落地。

30%

Final Presentation

期末综合评估。

20%

Assignments

作业详情

Assignment 1: Core Analysis

CSSE3610 Concurrency: Theory and Practice 的核心分析与验证任务。

重点: 从问题拆解到方案验证的完整流程。

要求:提交分析报告、实验结果与关键图表/代码。

⏱ 预计 20 小时

Assignment 2: Integrated Project

完成端到端项目或专题研究任务。

重点: 技术路线选择、风险控制与结果表达。

要求:包含项目成果、展示材料与复盘。

⏱ 预计 28 小时

From Seniors

学长留下的

基础信息谁都查得到,真正值钱的是过来人的经验。

学姐说

比你早一年的学长留下的真实经验 —— ChatGPT 给不了。

这门课还没有学长经验,你可以是第一个 —— 注册后在课内分享。

往年考点 / 踩坑

这门课暂无往年考点记录。

毕业生去向(整体)

下面是匠人学院毕业生整体去过的公司分布(来自脱敏校友证言)。这是全平台的总体去向,不代表选这门课的人一定去这些公司。

统计自 317 份脱敏校友证言

Deloitte

6 位校友

岗位:Graduate Program · Graduate Consulting · Platform Engineer · Web developer · Platform engineer

Zerologix

4 位校友

岗位:Frontend Dev · junior frontend developer · Front-end Developer · Full Stack Developer

Servian

4 位校友

岗位:Full-stack Developer · Data Engineer · Consultant

关于这块数据,我们说实话

雇主墙来自脱敏毕业生证言(testimonials)的整体分布,无法关联到具体学员或其所选课程;仅作为毕业生去向的总体社会证明展示。

我们没有"某位学长选了这门课、后来进了哪家公司"这种可查询的个人去向档案 —— 校友证言是脱敏的,无法关联到具体的人或他选过的课。所以这里只给整体分布,不给个人路径,不编。