Chứng minh rằng một chương trình là "chủ đề an toàn" là khó. Tuy nhiên, có thể định nghĩa cụ thể và chính thức thuật ngữ "cuộc đua dữ liệu". Và có thể xác định xem một dấu vết thực thi của một chương trình cụ thể có hay không có một cuộc đua dữ liệu theo thời gian tỷ lệ thuận với kích thước của dấu vết. Kiểu phân tích này quay trở lại ít nhất là vào năm 1988: Barton P. Miller, Jong-Deok Choi, "Một cơ chế để gỡ lỗi hiệu quả các chương trình song song", Conf. trên Prog. Lang. Dsgn. và Impl. (PLDI-1988): 135-144 .
Đưa ra một dấu vết của một thực thi, trước tiên chúng ta xác định một sự kiện xảy ra - trước một phần - giữa các sự kiện trong dấu vết. Cho hai sự kiện và b xảy ra trên cùng một luồng thì a < b hoặc b < a . (Các sự kiện trên cùng một luồng tạo thành một tổng thứ tự được đưa ra bởi ngữ nghĩa tuần tự của ngôn ngữ lập trình.) Các sự kiện đồng bộ hóa (ví dụ, chúng có thể được mua lại và phát hành), đưa ra một liên kết bổ sung xảy ra - trước khi đặt hàng từng phần. (Nếu luồng S phát hành một mutex và sau đó luồng T thu được mutex đó, chúng ta nói rằng việc phát hành xảy ra - trước khi có được.)mộtbmột < bb < aST
Sau đó được cung cấp hai lần truy cập dữ liệu (đọc hoặc ghi vào các biến không phải là biến đồng bộ hóa) và b ở cùng một vị trí bộ nhớ, nhưng bởi các luồng khác nhau và trong đó a hoặc b là thao tác ghi chúng ta nói rằng có dữ liệu- cuộc đua giữa a và b nếu không a < b hay b < a .mộtbmộtbmộtbmột < bb < a
Các 11 tiêu chuẩn C ++ là một ví dụ điển hình. (Phần có liên quan là 1,10 trong thông số kỹ thuật dự thảo có sẵn trực tuyến.) C ++ 11 phân biệt giữa các đối tượng đồng bộ hóa (mutexes và các biến được khai báo với một atomic<>
loại) và tất cả các dữ liệu khác. Thông số kỹ thuật C ++ 11 nói rằng lập trình viên có thể lý giải về việc truy cập dữ liệu trên một dấu vết của chương trình đa luồng như thể nó phù hợp theo tuần tự nếu các truy cập dữ liệu không có dữ liệu chạy đua.
Công cụ Helgrind (một phần của Valgrind) thực hiện loại phát hiện dựa trên dữ liệu xảy ra trước khi thực hiện một số công cụ thương mại (ví dụ: Intel Inspector XE.) Các thuật toán trong các công cụ hiện đại dựa trên việc giữ đồng hồ vector liên kết với mọi luồng và đồng bộ hóa vật. Tôi nghĩ rằng kỹ thuật sử dụng đồng hồ vector này để phát hiện cuộc đua dữ liệu đã được Michiel Ronsse tiên phong ; Koen De Bosschere: "RecPlay: một hệ thống phát lại / ghi lại thực tế tích hợp đầy đủ", ACM Trans. Tính toán. Hệ thống. 17 (2): 133-152, 1999 .