Mẫu prompt gỡ lỗi điều kiện tranh chấp (race condition)

Điều kiện tranh chấp (race condition) là một trong những lỗi khó phát hiện và tái hiện nhất trong lập trình, đặc biệt trong các hệ thống bất đồng bộ, đa luồng hoặc xử lý song song. Lỗi này xảy ra khi nhiều tiến trình hoặc tác vụ cùng truy cập và thay đổi một tài nguyên chung mà không có cơ chế đồng bộ phù hợp, dẫn đến kết quả không nhất quán, khó dự đoán và đôi khi chỉ xuất hiện ngẫu nhiên trong những điều kiện rất cụ thể.

Trong bối cảnh đó, việc sử dụng prompt để gỡ lỗi race condition đang trở thành một phương pháp hiệu quả giúp lập trình viên tiếp cận vấn đề một cách có hệ thống. Thay vì thử nghiệm thủ công hoặc suy đoán nguyên nhân, các prompt được thiết kế tốt có thể hỗ trợ phân tích luồng thực thi, xác định điểm xung đột truy cập dữ liệu, và làm rõ thứ tự xảy ra của những sự kiện bất đồng bộ.

Bài viết này tập trung vào cách xây dựng prompt mẫu nhằm hỗ trợ phát hiện và xử lý race condition, từ việc mô tả tình huống, cung cấp log hoặc đoạn code liên quan, cho đến yêu cầu AI phân tích thứ tự thực thi và đề xuất giải pháp đồng bộ phù hợp. Qua đó, giúp giảm thiểu thời gian debug, nâng cao độ tin cậy của hệ thống và hạn chế các lỗi khó lường trong môi trường thực tế.

Mẫu prompt gỡ lỗi điều kiện tranh chấp (race condition)

Hãy giúp tôi gỡ lỗi vấn đề đồng thời này:

[DÁN CODE]

Vấn đề: [MÔ TẢ ĐIỀU KIỆN TRANH CHẤP]
Hành vi mong đợi: [ĐIỀU GÌ NÊN XẢY RA]
Hành vi thực tế: [ĐIỀU GÌ XẢY RA]

Cung cấp:
1. Xác định điều kiện tranh chấp
2. Giải pháp an toàn luồng
3. Phương pháp đồng bộ
4. Chiến lược kiểm thử

Phù hợp nhất cho: GPT-5, Claude 4 Sonnet

Cách sử dụng prompt mẫu

  • Code được dùng để phân tích:
// raceConditionDemo.js

let balance = 100;

async function withdraw(amount) {
    console.log(`Start withdraw ${amount}, balance = ${balance}`);

    // Giả lập delay (I/O, DB, API...)
    await new Promise(resolve => setTimeout(resolve, Math.random() * 100));

    if (balance >= amount) {
        balance -= amount;
        console.log(`Success withdraw ${amount}, new balance = ${balance}`);
    } else {
        console.log(`Failed withdraw ${amount}, balance = ${balance}`);
    }
}

// Chạy song song 2 request
async function run() {
    await Promise.all([
        withdraw(80),
        withdraw(30)
    ]);

    console.log("Final balance:", balance);
}

run();
  • Vấn đề: Đây là race condition:
    • Cả 2 function đọc cùng balance = 100
    • Sau đó cùng ghi → sai logic
  • Hành vi mong đợi: Mỗi lần chỉ 1 function truy cập balance, tránh xung đột
  • Hành vi thực tế: Không kiểm soát truy cập, Data bị ghi đè sai

Kết quả prompt mẫu được thực hiện bằng GPT-5

Hãy giúp tôi gỡ lỗi vấn đề đồng thời này:

// raceConditionDemo.js

let balance = 100;

async function withdraw(amount) {
    console.log(`Start withdraw ${amount}, balance = ${balance}`);

    // Giả lập delay (I/O, DB, API...)
    await new Promise(resolve => setTimeout(resolve, Math.random() * 100));

    if (balance >= amount) {
        balance -= amount;
        console.log(`Success withdraw ${amount}, new balance = ${balance}`);
    } else {
        console.log(`Failed withdraw ${amount}, balance = ${balance}`);
    }
}

// Chạy song song 2 request
async function run() {
    await Promise.all([
        withdraw(80),
        withdraw(30)
    ]);

    console.log("Final balance:", balance);
}

run();

Vấn đề: Đây là race condition:
  Cả 2 function đọc cùng balance = 100
  Sau đó cùng ghi → sai logic

Hành vi mong đợi: Mỗi lần chỉ 1 function truy cập balance, tránh xung đột

Hành vi thực tế: Không kiểm soát truy cập, Data bị ghi đè sai

Cung cấp:
1. Xác định điều kiện tranh chấp
2. Giải pháp an toàn luồng
3. Phương pháp đồng bộ
4. Chiến lược kiểm thử
Thứ Hai, 06/04/2026 14:57
31 👨 26

Prompt liên quan

Xác thực tài khoản!

Theo Nghị định 147/2024/ND-CP, bạn cần xác thực tài khoản trước khi sử dụng tính năng này. Chúng tôi sẽ gửi mã xác thực qua SMS hoặc Zalo tới số điện thoại mà bạn nhập dưới đây:

Số điện thoại chưa đúng định dạng!
Số điện thoại này đã được xác thực!
Bạn có thể dùng Sđt này đăng nhập tại đây!
Lỗi gửi SMS, liên hệ Admin
0 Bình luận
Sắp xếp theo