1-) C# Syntax'ını fazla bilmiyorum. Paralel programlama dersinde OpenMP ve Pthreads grdükten sonra şimdi C# ile TPL'e geçtik. Bir adet sorunum var. 2 tane metod yazdım onları kullanıyorum. a-)static string actionWithReturnValue a metodu aldığı argumanı 5 sn sonra geri gnderiyor sonuç olarak. Başka bi bok yapmıyor b-)static void actionWithArgument b metodu aldığı argumanı ve Task. ID sini yazdırıp, 5 sn sonra tekrar yazdırıyor ve sonlanıyor. Metodlardan oluşturulan tasklara parametreleri şu şekilde yolluyorum. rneğin kullanıcı 3 sayısını girdi. a-) 0arguman,1arguman,2arguman b-) , , Sorunum: Program genellikle son argumanı yazdırıyor. Bunun bir sebebi mi var ben mi bir yanlış yapıyorum? Kodlar aşağıda: using System; using System. Collections. Generic; using System. Linq; using System. Text; using System. Threading. Tasks; using System. Threading; namespace ParalelProgramlamaDotNetDenemeleri { class Program { static void action { Console. WriteLine("Geri Dnüş değersiz, Parametresiz Thread Başlatıldı, TID: ", Task. CurrentId); // Thread. Sleep(2000); Console. WriteLine("Geri Dnüş değersiz, Parametresiz Thread Bitti = X, TID: ", Task. CurrentId); } static void actionWithArgument { for (int i = 0; i < yazdirmaSayisi; i++ ) Console. WriteLine("Geri Dnüş değersiz, arg: Thread Başlatıldı, TID: ", Task. CurrentId, arg); Thread. Sleep(5000); Console. WriteLine("Geri Dnüş değersiz, arg: Thread Bitti, TID: ", Task. CurrentId, arg); } static string actionWithReturnValue static void Main { Console. WriteLine ; int sayi = Convert. ToInt32(Console. ReadLine ; List<Task> tListesi = new List<Task> ; for (int i = 0; i < sayi; i++ ) Task. WaitAll(tListesi. ToArray ; tListesi. Clear ; List<Task<string>> tListesi2 = new List<Task<string>> ; for (int i = 0; i < sayi; i++ ) foreach(Task<string> t in tListesi2) Console. WriteLine ; Console. ReadKey ; } } } Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

Kod üzerinde biraz değişiklikler yapıp WaitAny gibi fonksiyonları test ediyordum. Sorunu daha nceden yaşadığım için çzdüm.. Bir anda pthread'de karşılaştığım hata aklıma geldi. Bunun aynısı idi hata. Aynı sıkıntıyı yaşayanlar olursa diye tbt ailesine yazayım sebebini. Ne zaman FOR dngüsündeki sayacı arguman olarak gndersem, ÇOĞU zaman sayaç argumanının son değerini threadler işliyordu. Bunun sebebi pthread_create fonksiyonunda yatıyor zaten... int pthread_create(pthread_t thread, const pthread_attr_t attr, void , void arg); pthread ile fonksiyon kullanabilmek için fonksiyonu void argumanı alan bir fonksiyon şeklinde dizayn etmek gerekiyor. Fonksiyon parametre olarak değişkenin adresini aldığı için ve for dngüsü çok hızlı bir şekilde işlediği için ilk çalışan threadler dahi çoğu zaman argumanı işleyinceye kadar, i:sayacı son haline gelmiş oluyor. Doğal olarak kendisine verilen adresteki veriye, for dngüsü bittikten sonra ulaşmaya çalışan thread i:sayacının son halindeki değeri işleyebiliyor. C# dada muhtemelen TASK sınıfında fonksiyonlara arguman yollarken Pass by Referance ya da Pass by Adress sistemi kullanılıyor. Pass by value olmuyor sanırım threadlerde. Bu yüzden bu hatayı aldım sanırım. Yolladığım argumanın, Thread argumana erişinceye kadar değişmediğini garanti altına almam gerekiyor. Aşağıdaki ilk kod sorunsuz çalışıyor. Hatta teorimi desteklemek için aşağıdaki ikinci kodu yazdım ve çoğu zaman güle güle tbt yazdırıyor ve sylediğim teoriyi destekliyor. Kolay gelsin herkese. Aşağıdaki kodlarda bir sıkıntı yaşamadım. using System; using System. Collections. Generic; using System. Linq; using System. Text; using System. Threading. Tasks; using System. Threading; namespace ParalelProgramlamaDotNetDenemeleri { class Program { static void action { Console. WriteLine("Geri Dnüş değersiz, Parametresiz Thread Başlatıldı, TID: ", Task. CurrentId); // Thread. Sleep(2000); Console. WriteLine("Geri Dnüş değersiz, Parametresiz Thread Bitti = X, TID: ", Task. CurrentId); } static void actionWithArgument { for (int i = 0; i < yazdirmaSayisi; i++) Console. WriteLine("Geri Dnüş değersiz, arg: Thread Başlatıldı, TID: ", Task. CurrentId, arg); Thread. Sleep(1000); Console. WriteLine("Geri Dnüş değersiz, arg: Thread Bitti, TID: ", Task. CurrentId, arg); } static string actionWithReturnValue static void Main { Console. WriteLine ; int sayi = Convert. ToInt32(Console. ReadLine ; List tListesi = new List ; for (int i = 0; i < sayi; i++) while (tListesi. Count > 0) //WaitAny ile listeyi boşaltma Console. WriteLine ; List<Task> tListesi2 = new List<Task> ; for (int i = 0; i < sayi; i++) Random rnd = new Random ; int randomSayi = rnd. Next(tListesi2. Count ; Console. WriteLine("2. Listede tane task var. Bunların tanesi çalıştırılacak", tListesi2. Count , randomSayi); List<Task> calismisList = new List<Task> ; for (int i = 0; i < randomSayi; i++) tListesi2. Clear ; foreach Console. WriteLine ; Console. ReadKey ; } } } // ikinci test program... Teorimi deskteliyor mu bakalım using System; using System. Collections. Generic; using System. Linq; using System. Text; using System. Threading. Tasks; using System. Threading; namespace ParalelProgramlamaDotNetDenemeleri { class Program { static void action { Console. WriteLine("Geri Dnüş değersiz, Parametresiz Thread Başlatıldı, TID: ", Task. CurrentId); // Thread. Sleep(2000); Console. WriteLine("Geri Dnüş değersiz, Parametresiz Thread Bitti = X, TID: ", Task. CurrentId); } static void actionWithArgument { for (int i = 0; i < yazdirmaSayisi; i++ ) Console. WriteLine("Geri Dnüş değersiz, arg: Thread Başlatıldı, TID: ", Task. CurrentId, arg); Thread. Sleep(1000); Console. WriteLine("Geri Dnüş değersiz, arg: Thread Bitti, TID: ", Task. CurrentId, arg); } static string actionWithReturnValue static void Main } } DrKill tarafından 25/May/14 19:22 tarihinde düzenlenmiştir Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

DrKill tarafından 25/May/14 12:47 tarihinde düzenlenmiştir Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

şimdi yatacağım hocam, p. tesi sınav var daha çalışamadım bile işim zor :) şuralara bak olmadı yine konuşuruz sonra http://blog.slaks. net/2013-10-11/threads-vs-tasks/ http://stackoverflow.com/questions/4130194/what-is-the-difference-between-task-and-thread http://stackoverflow.com/questions/13429129/task-vs-thread-differences edit: pluralsight ın paralel programlama ile ilgili eğitimleri vardı hocam.. onları internetten bulup indir.. faydalı şeyler var.. unbalanced tarafından 25/May/14 04:00 tarihinde düzenlenmiştir Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

vayy tpl he :) türkiye de mi okuyorsun hocam? yani tr de byle bir şey gsteriyorlar üniversitede helal olsun diyorum.. soruna gelince, aslında bir sorun değil gsterim ile ilgili bir problem olduğunu düşünüyorum, ben de java da multi-core testleri yaptığımda bu tarz farklı şeyler yazdırıyordu.. aynı şekilde contiki de de byle farklı farklı geliyor.. kodda sorun yok ama yazdırma işleminden kaynaklı şeyler var. tam emin olmak için daha basit şeylerle dene. tek parametre girerek yapmaya çalış.. sonra biraz daha bi şeyler ekle, sleeping süresini arttır-azalt... haftaiçi unutmazsam ben de bakarım bunlara.. zevkli konulardır Aynen hocam Türkiye'de okuyorum. Ayrıca bir soru daha sormak istiyorum. Task sınıfı ile Thread sınıfının farkı nedir? Şimdi anladığım kadarıyla C++ daki (ekstra pthread kütüphanesi ya da C++11 ile gelen thread sınıfı) gibi sonuç gelmeden nce join yapmama gerek yok C# da. Eğer sonuç bekliyorsam otomatik join yapıyor. Ayrıca memorry leakleriyle felanda uğraşmama gerek yok. Ama farkını tam anlayamadım. Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir

vayy tpl he :) türkiye de mi okuyorsun hocam? yani tr de byle bir şey gsteriyorlar üniversitede helal olsun diyorum.. soruna gelince, aslında bir sorun değil gsterim ile ilgili bir problem olduğunu düşünüyorum, ben de java da multi-core testleri yaptığımda bu tarz farklı şeyler yazdırıyordu.. aynı şekilde contiki de de byle farklı farklı geliyor.. kodda sorun yok ama yazdırma işleminden kaynaklı şeyler var. tam emin olmak için daha basit şeylerle dene. tek parametre girerek yapmaya çalış.. sonra biraz daha bi şeyler ekle, sleeping süresini arttır-azalt... haftaiçi unutmazsam ben de bakarım bunlara.. zevkli konulardır Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

ekran grüntülerini koyar mısın hocam.. deneme şansım yok şu aralar Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.

şimdi yatacağım hocam, p. tesi sınav var daha çalışamadım bile işim zor :) şuralara bak olmadı yine konuşuruz sonra http://blog.slaks. net/2013-10-11/threads-vs-tasks/ http://stackoverflow.com/questions/4130194/what-is-the-difference-between-task-and-thread http://stackoverflow.com/questions/13429129/task-vs-thread-differences edit: pluralsight ın paralel programlama ile ilgili eğitimleri vardı hocam.. onları internetten bulup indir.. faydalı şeyler var.. Aramanın gücü işte. Çok saolasın hocam Thread ve Task arasındaki temel farkları anladım. Bu imzayı her grdüğünüzde 4gb kotanızın 0,00000358559191226959228515625 azalmaktadır. Bilerek ve istenerek bu imza yapılmıştır. Amaç kotanızı smürmektir