İş parçacığı tamamlanmadan önce çoklu iş parçacığının değerleri güncelleştiremediğini anlamakta güçlük çekiyorum. Ayrı iş parçacığı, referansların veya değerlerin kendi kopyasına sahip midir?
Çoklu iş parçacığı sorunu değeri güncelleştiriliyor
Değilse, benim anlayışıma için aşağıdaki kod MyMethod çağrıldığında düzgün çalışması gerekir, ancak çoğu zaman thread.IsAlive
önce dizide bazı MyType nesnelerin örneklerini yaratmaz yanlış olur:
class MyClass
{
static MyType[] obj = new MyType[Environment.ProcessorCount - 1];
void MyMethod()
{
Thread[] threads = new Thread[Environment.ProcessorCount - 1];
for (int i = 0; i < Environment.ProcessorCount - 1; i++)
{
threads[i] = new Thread(() => FillObjects(i));
threads[i].Priority = ThreadPriority.AboveNormal;
threads[i].Start();
}
while (threads[i].Any(c => c.IsAlive))
{
Thread.Sleep(50);
}
}
void FillObjects(int i)
{
obj[i] = new MyType();
//perform actions with obj[i] to fill it with necessary values
}
}
İyi nokta. Eğer FillObjects() 'in ilk ifadesi bir' Thread.Sleep (1000) 'ise, muhtemelen sadece 'obj [Environment.ProcessorCount - 1]' null olur, çünkü bu döngü, son değerine' i 'dönüşürdü ilk nesne oluşturulmadan önce. Bunu düşünürsek, FillObjects() atlayabilir çünkü ben aslında döngüden çıkmadan önce "Environment.ProcessorCount-1" 'e yükseltilir ve böylece' obj 'sınırları dışında kalır. –
Cevabınız için teşekkür ederiz, gerçekten önemli sorunlardan biriydi, şimdi nesneleri doğru bir şekilde örneklendiriyor. Bununla birlikte, iş parçacığı kapanmadan önce tüm işlemleri düzgün şekilde tamamlamaz ve bunu rastgele yapar. Baska öneri? – Almis
Kendi mantıksal hatasını buldum, şimdi düzgün çalışıyor. – Almis