2010-04-22 11 views
7

, "Bir yarış durumu, iki veya daha çok iş parçacığı veya süreçler bazı paylaşılan verileri okuma veya yazma edildiği bir durumdur ve nihai sonuç ipler planlanan nasıl zamanlamasına bağlıdır. Yarış koşulları öngörülemeyen sonuçlara ve ince program hatalarına yol açabilir. " . Makale Java ile ilgili olsa da, genel olarak aynı tanımladım.Çok iş parçacıklı okumada yarış durumu nedir? Ibm.com üzerinde <a href="http://www.ibm.com/developerworks/library/j-threads1.html" rel="noreferrer">an article</a> göre

olarak bildiğim kadarıyla, RAM okuma basit operasyon spesifik girdi hatlarının durumlarını ayarlama oluşur (adres, vb okuyun) ve çıkış hatlarının durumlarını okuma. Bu, açık bir şekilde iki cihaz tarafından aynı anda yürütülemeyen ve serileştirilmesi gereken bir işlemdir.

Şimdi, birkaç iş parçacığının belleğe bir nesneye eriştiğinde bir durumumuz olduğunu varsayalım. Teorik olarak, yarış koşullarını önlemek için bu erişim serileştirilmelidir. Ancak ör. Okuyucular/yazarlar algoritması, rasgele sayıdaki okuyucunun paylaşımlı belleği aynı anda kullanabileceğini varsayar.

Yani, soru şu: bir (WinAPI örn cinsinden) çoklu kullanırken okuma özel bir kilit uygulamak zorunda? Değilse neden? Bu kontrol nerede uygulanmaktadır - OS, donanım? donanım seviyesinde bellek Okuma

Saygılarımızla, Kuba

+0

hah, told'ya;] –

cevap

6

sırayla yapılır - Eğer bu seviyede eşzamanlılık konusunda endişelenmenize gerek yoktur. İki iş parçacığı okuma komutları ve adres veriyolundaki gerekli tüm adres ayar adresleri ve gerçek okumalar, bellek erişim donanımı tarafından, her zaman doğru şekilde çalışacak şekilde uygulanır.

Aslında aynı okuma için de geçerlidir/okurken dışında senaryoları yazmak ve yazma istekleri farklı sonuçlar zamanlama bağlı alacak biçimde birbirinin arasına ve senkronizasyonu neden ihtiyaç budur.

0

Bu sorunun basit bir cevabı yoktur. Farklı API'lerin (ve farklı ortamların) farklı düzeylerde çoklu duyu bilinci ve çok iş parçacıklı güvenliği olacaktır.

2

sürece verileri değiştirerek bir şey yok gibi birkaç iş parçacığı üzerinden okunması olmak tamamen güvenli. Aynı saat döngüsünde okumak için belleğe erişmek için iki CPU (veya çekirdek) yarış olsa bile, erişimleri bellek denetleyicisi tarafından serileştirilecek ve birbirleriyle etkileşime girmeyeceklerdir. Bu özellik HW'nin doğru çalışması için gereklidir.

İlgili konular