Membuktikan bahwa sebuah program "amankan" adalah sulit. Namun, adalah mungkin untuk secara konkret dan formal mendefinisikan istilah "ras data". Dan adalah mungkin untuk menentukan apakah suatu jejak eksekusi dari suatu menjalankan program tertentu tidak atau tidak memiliki ras data dalam waktu sebanding dengan ukuran jejak. Jenis analisis setidaknya kembali ke tahun 1988: Barton P. Miller, Jong-Deok Choi, "Mekanisme untuk Debugging Efisien dari Program Paralel", Conf. pada Prog. Lang. Dsgn. dan Impl. (PLDI-1988): 135-144 .
Diberikan jejak eksekusi, pertama-tama kita menentukan urutan-sebelum-sebagian antara peristiwa dalam jejak. Mengingat dua kejadian dan yang terjadi pada utas yang sama maka atau . (Peristiwa pada utas yang sama membentuk urutan total yang diberikan oleh semantik berurutan dari bahasa pemrograman.) Peristiwa sinkronisasi (ini bisa berupa perolehan dan pelepasan mutex, misalnya), memberikan inter-utas tambahan yang terjadi sebelum pesanan parsial. (Jika utas merilis mutex dan kemudian utas memperoleh mutex itu, kami katakan bahwa pelepasan terjadi sebelum sebelum mengakuisisi.)b a < b b < a S TSebuahba < bb < aST
Kemudian diberi dua akses data (membaca atau menulis ke variabel yang bukan variabel sinkronisasi) dan yang ke lokasi memori yang sama, tetapi dengan utas yang berbeda dan di mana atau adalah operasi tulis, kami mengatakan bahwa ada data- balapan antara dan jika tidak atau .b a b a b a < b b < aabababa<bb<a
Standar C ++ 11 adalah contoh yang baik. (Bagian yang relevan adalah 1,10 dalam spesifikasi draf yang tersedia online.) C ++ 11 membedakan antara objek sinkronisasi (mutex, dan variabel yang dideklarasikan dengan atomic<>
tipe) dan semua data lainnya. Spesifikasi C ++ 11 mengatakan bahwa programmer dapat beralasan tentang akses data pada jejak program multithreaded seolah-olah konsisten secara berurutan jika akses data semuanya bebas data-ras.
Alat Helgrind (bagian dari Valgrind) melakukan pendeteksian data-raced yang terjadi sebelum data berdasarkan seperti halnya beberapa alat komersial (misalnya, Intel Inspector XE.) Algoritma dalam alat modern didasarkan pada menjaga jam vektor yang terkait dengan setiap utas dan sinkronisasi obyek. Saya pikir teknik ini menggunakan jam vektor untuk deteksi ras data dipelopori oleh Michiel Ronsse; Koen De Bosschere: "RecPlay: catatan praktis / sistem replay yang terintegrasi penuh", ACM Trans. Komputasi. Syst. 17 (2): 133-152, 1999 .