Standart c kutuphaneleri 1970li yıllarda kabul edilirken, kavram olarak henuz ortada multithread zihniyeti yoktu. Bu sebeple, bircok kutuphanede farklı threadlerin aynı anda bircok iş yapması duşunulmemişti. Bunlara ornek vermek gerekirse aşağıdaki program parcacağını duşunun :
Kod:
BOOL bFailure = (system(“NOTEPAD.EXE c:\\autoexec.bat) == -1);If(fFailure)}
Şimdi errno değişkeni, standart c icin global bir değişkendir, bir hata anında bir değer atanır.
Diyelimki, sizin system cağırınızdan hemen sonra bellek hatası oluştu ve errno’nun ENOMEM değerini almasını bekliyorsunuz, ve if dongusune girdiğiniz anda başka bir thread’de yaptığınız işlemler sonucu bir taşma hatası oluştu, bu durumda errno hemen E2BIG olarak hatandı. Gorduğunuz gibi sizin o an ilgilendiğiniz thread’deki kontrol etmek istediğiniz errno artık doğru değeri gosteremiyor. Bunun dışında, errno,_doserrno,strtok,_wcstok,strerror,_strerror, gmtime vs de multihthread duşunulmeden yazılmış ve multithreadde sorun cıkartabilecek fonksiyonlardır.
( strtok : burada tanımlanan internal değişkenler statictir, dolayısıyla başka bir thread bu static değişkenleri değiştirebilir )
Bu sebepten dolayı, multithread ortamda calışmak isteyen c/c++ programları ozel bir initialize işlemi gerektirir. Ornek olarak errno değişkeninin global olmaktan cıkıp, thread icin lokal olması gerekmektedir.
Umarım şimdi, visual c++ da derleme yaparken multithread veya singlethread neden sectiğimizi anlamışsınızdır.
Yazının orjinal halini : Jeffrey Richter, Advanced windows programming de bulabilirsiniz
__________________
Multithread vs Singlthread Derleme Farklılıkları
Android & IOS Uygulama Geliştirme0 Mesaj
●30 Görüntüleme
- ReadBull.net
- Programlama ve Yazılım
- Android & IOS Uygulama Geliştirme
- Multithread vs Singlthread Derleme Farklılıkları