C/C++ İçin thread kütüphanesi önerisi

Katılım
30 Ağustos 2020
Mesajlar
566
Makaleler
1
Çözümler
2
C dili ile geliştirdiğim cross-platform projede (Windows ve UNIX-like sistemler) thread kütüphanesi olarak ne kullanmalıyım? Aklımda C11 ile gelen thread.h kütüphanesi ve bir POSIX standartı olan pthread kütüphanesi var. Yanlış bilmiyorsam pthread kütüphanesi daha yaygın bir kütüphane ancak Windows ile uyumluluğu konusunda şüphelerim var. Hangi thread kütüphanesini kullanmalıyım? Bu ikisinden başka öneriniz var mıdır?
 
C yazmayali yillar oluyor.

Temelde unix ve win sistemlerin threading yapisi o kadar farkli ki bir noktadan sonra mecburen windows ise soyle yap, unix ise boyle yap pragmalari yazmak durumunda kalinacak. pthreads-win32 gibi seyler olsa da kullanabildigi yere kadar pthreads kullanip aradaki aciklar icin custom seyler yapmak durumunda kalinacak ki bence low level mantigina aykiri isler. Oyle bir compatibility isteseydim C kullanmazdim, java threads kullanirdim, JVM benim icin bunu yapardi.

Sahsi tavsiyem daha bastan bu gercegi kabullenip uygun pragma tanimlari ile 2 farkli implementasyon yap. Low-level OS agnostik kod yazmak ciddi bir zorluk. Threading icin durum hic farkli degil.
 
Windows icin pthread destegi var ama Cygwin bagimliligin olur. Cygwin low-level POSIX to NT translationlarin buyuk bi kismini hallediyor. Ama Cygwin LGPLv3+ lisanslamaya sahip, statik linklemeye izin vermiyor aklinda olsun.

Eger usenmezsen C++ ile bi API yazabilir ve onu statik linkleyebilirsin. C++'in standart library'de sundugu threading paketi full OS agnostik.

Eger denerim diyorsan; tum fonksiyonlari yazarken C++ tarafinda try catch'li bi sistem hazirla, C tarafi icin de bu sistemi kullan. C++ tarafinda exception atmiyor olman lazim, butun exceptionlari yakalayip C tipi errorlara donusturdugunden emin ol.

Kullanim anlaminda belirli konseptler disinda aman aman bi fark olmadan yardimci olabiliyor olmasi lazim.

Yerinde olsam ben muhtemelen Cygwin ile yapardim.
 
Son düzenleme:
Windows icin pthread destegi var ama Cygwin bagimliligin olur. Cygwin Low-level POSIX to NT translationlarin buyuk bir kismini hallediyor. Ama Cygwin LGPLv3+ lisanslamaya sahip, statik linklemeye izin vermiyor aklinda olsun.

Eger usenmezsen C++ ile bir API yazabilir ve onu statik linkleyebilirsin. C++'in standart Library'de sundugu threading paketi full OS agnostik.

Eger denerim diyorsan; tum fonksiyonlari yazarken C++ tarafinda try Catch'li bir sistem hazirla, C tarafi icin de bu sistemi kullan. C++ tarafinda exception atmiyor olman lazim, butun exceptionlari yakalayip C tipi errorlara donusturdugunden emin ol.

Kullanim anlaminda belirli konseptler disinda aman aman bir fark olmadan yardimci olabiliyor olmasi lazim.

Yerinde olsam ben muhtemelen Cygwin ile yapardim.

Hocam cevabınız için teşekkür ederim. Birkaç sorum olacak C++'in thread kütüphanesi için bir wrapper hazırladığımda tüm C++ standart kütüphanesini derleme zorunluluğu var mı yoksa sadece thread kütüphanesi (ve belki birkaç gerekli kütüphane daha) derlemek mümkün mü? Ayrıca yanlış araştırmadıysam Windows'ta mingw64 paketinin içinde doğrudan pthread desteği varmış, bu pthread kütüphanesini MSVC uyumlu hale getirmek mümkün mü? Bu arada belirteyim amacım basitçe birkaç thread oluşturup bunları gerektiğinde durdurmak, kapatmak. Fazla detaylı bir kütüphaneye ihtiyacım yok.
 
Hocam cevabınız için teşekkür ederim. Birkaç sorum olacak C++'in thread kütüphanesi için bir wrapper hazırladığımda tüm C++ standart kütüphanesini derleme zorunluluğu var mı yoksa sadece thread kütüphanesi (ve belki birkaç gerekli kütüphane daha) derlemek mümkün mü?
Evet. Sadece thread headerını derlediğin müddetçe thread headerının kendi ihtiyaç duyduğu headerlar dışında bi şeye ihtiyacın olmayacak. Onları da compiler otomatik halleder. Ama C++ ile C import yapabileceğin bi API yazıp onu maintain etmen gerekecek. Çok zor değil ama yine de bir kaç kırılma noktası olabilir muhtemelen.


Windows'ta mingw64 paketinin içinde doğrudan pthread desteği varmış, bu pthread kütüphanesini MSVC uyumlu hale getirmek mümkün mü?
Bilmiyorum.

Basit thread oluştur ve join için bence en rahatı C++ ile static linking yapabileceğin lib oluşturmak olur gibi geliyor.
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Geri
Yukarı