2012-12-28 23 views
5
I have a:
class base 
{ 
    base(){f(this);}; 

    static void f(base * b) {(b->d)++;}; 

    int d; 
}; 

Parçacığı Güvenliği ve statik işlevleri

2 ayrı iş parçacığı üzerinde ben tip tabanının bir nesne oluşturmak Şimdi, eğer yöntem iplik güvenli kabul edilebilir f ki? Bu soruyu soruyorum çünkü bildiğim kadarıyla bir iş parçacığının güvenli olması için statik üyeleri veya genel değişkenleri kullanmaması gerekir. Fakat yukarıdaki örnekte gördüğünüz gibi, d değişkenini statik yapmamaya karar verdim.

Ayrıca, bu satırı korumak zorunda olmadığımı düşünüyorum: (b->d)++; her bir iş parçacığı ayrı bir temel ve değişken d örneğine sahip olduğundan, bir muteks ile.

Analizimde düzeliyorum mu? Dikkat etmem gereken bir şey var mı?

+1

Doğru, temel işaretçiler iş parçacığına özgü olduğunuz sürece, iyisiniz. – perreal

+0

Programınızı derleyebiliyor musunuz? Bir derleme hatası kusması gerekir – stamhaney

+0

@stamhaney, hayır ben sadece teoriyi çözmeye çalışıyorum değil :) lütfen problemi belirtin – Kam

cevap

7

Evet, yapıcınız yalnızca iş parçacığı değişkenlerine (özellikle, d) eriştiği için iş parçacığı için güvenlidir. Bu tanımlanmamış davranışı gösterir, çünkü sıfırlamayı gerçekleştirmek için başlatılmamış d okur, ancak iş parçacığı güvenliği ile ilgisi yoktur. Şimdi bu d başlatıcı listesinde başlatılır

base(): d(0) {f(this);}; 

, programınız öngörülebilir şekilde davranan: Burada

Eğer tanımsız davranış düzeltebilirsiniz nasıl.

+0

Teşekkür ederim :) bu harika – Kam

İlgili konular