Đồng bộ & Phối hợp

Hai luồng cùng đụng một dữ liệu — mọi bài toán khó của concurrency bắt đầu từ đây. Bài học race condition từ interleaving, atomic và mutex, deadlock qua 4 điều kiện Coffman, và IPC (pipe, shared memory, socket) như lối thoát tránh chia sẻ.

7 bài · ~80 phútMiễn phí

Nội dung

Danh sách bài học

  1. 01

    Tổng quan module — Đồng bộ & Phối hợp

    Hai luồng cùng đụng một dữ liệu — mọi bài toán khó của concurrency bắt đầu từ đây. Lộ trình module: race condition, atomic/mutex, deadlock, IPC.

    ~6 phút
  2. 02

    Race condition — vì sao count++ sai khi hai luồng đua nhau

    Vì sao count++ không nguyên tử, interleaving sinh ra kết quả sai thế nào, và vì sao bug race chỉ xuất hiện một phần triệu lần chạy — khó tái hiện nhất.

    ~12 phút
  3. 03

    Mutex & atomic (CAS) — bảo vệ critical section khỏi race

    Hai công cụ chặn race: phép toán atomic (CAS) và mutex (khoá vùng găng) — cơ chế, chi phí, khi nào dùng cái nào, và lựa chọn thứ ba: đừng chia sẻ.

    ~13 phút
  4. 04

    Deadlock — bốn điều kiện Coffman và cách phá vòng chờ

    Hai luồng giữ khoá chờ nhau mãi mãi: 4 điều kiện Coffman để deadlock xảy ra, cách nhận diện qua thread dump, và phòng ngừa bằng lock ordering.

    ~13 phút
  5. 05

    IPC — pipe, shared memory và socket giữa hai tiến trình

    Khi hai tiến trình cần nói chuyện: pipe, shared memory (nhanh nhất nhưng cần đồng bộ), socket (linh hoạt nhất) — chi phí và mô hình chia sẻ của từng cách.

    ~12 phút
  6. 06

    Mini-challenge — săn race và deadlock

    Cho một chương trình có cả race condition lẫn deadlock: tái hiện bug, chỉ ra interleaving gây lỗi, và sửa bằng đúng công cụ (atomic, mutex, lock ordering).

    ~18 phút
  7. 07

    Tổng kết module — Đồng bộ & Phối hợp

    Cheat sheet race, mutex/atomic (CAS), deadlock (Coffman, lock ordering), chi phí futex và IPC; kèm glossary, pitfall và self-assessment module.

    ~6 phút