Race Condition và data race là hai khác niệm khác nhau.
Nhiều race condition có thể xảy ra bởi data race và nhiều data race có thể gây ra race condition. Ngoài ra, race condition cũng có thể xảy ra mà không có data race và ngược lại.
Xét ví dụ sau, với x
là biến chia sẻ và ta mong muốn thread 1 sẽ được chạy trước thread 2.
Thread 1 Thread 2
lock(l) lock(l)
x=1 x=2
unlock(l) unlock(l)
Có thể thấy, biến x
được bảo vệ bởi cơ chế Mutex (sử dụng lock và unlock) nên sẽ không có data race xảy ra.
Tuy nhiên, không có gì đảm bảo rằng thread 1 sẽ được thực thi trước thread 2. Nói cách khác, race condition có thể xảy ra tùy thuộc thuật toán điều phối thread của hệ điều hành.