2010-05-09 16 views
11

Używam pthreads-win32, aby umożliwić obsługę wątków dla okien.Przenośność pthreads-win32 przez różne kompilatory okien

Mam projekt między platformami, który używa pthreads i chcę, aby działał na oknach z różnymi kompilatorami i różnymi wersjami systemu operacyjnego.

Przynajmniej zgodnie z dokumentacją pthreads-win32 powinien współpracować z MSVC, a nawet z kompilacjami MSVC.

Ale nie wiem, czy biblioteka jest testowana z najnowszymi kompilatorami MSVC, takimi jak MSVC-2008 i , jeśli jest obsługiwana w 64-bitowych oknach.

Od Własne doświadczenie Czy znasz jakieś problemy z tą biblioteką?

  • Jakieś problemy z MSVC8, MSVC9, MSVC10?
  • Jakieś problemy z systemem Windows x86_64?
  • Jakieś problemy z systemem Windows Vista/Windows 7?

Uwagi:

  • Nawet nie próbują zalecamy użycie Boost.Thread, nie jestem zainteresowany I jestem zaznajomieni z biblioteki Boost.Thread
  • jestem. nie interesuje ponowne wymyślanie interfejsu Wheel Win32 (brak RW-Locks, zmiennych warunkowych itp.).
  • Udało mi się skompilować projekty z MSVC-2008 i MinGW GCC-4.3, a następnie uruchomić testy jednostek na nim łatwo, przy użyciu aktualnej wstępnie skompilowanej biblioteki DLL pthreads.

Po prostu potrzebuję znać ograniczenia pthreads-win32.

+0

Przez ** ** przenośny znaczy tylko między wersjami systemu Windows? Jeśli tak, to trzymałbym się API kernel32. Czy istnieje znacząca przewaga przy użyciu pthread-win32? – jweyrich

+0

@jweyrich. Mam na myśli, że mogę go używać z najnowszym MSVC-2008 & | Windows7 i | x86_64. I nie, używanie Win32 API nie jest opcją (brak konkretnych wskaźników wątku, brak blokad RW, żadnych zmiennych warunkowych itp.) – Artyom

Odpowiedz

8

Cóż, paxdiablo najwyraźniej podsumował to tutaj. Ale z moich wcześniejszych doświadczeń z tą biblioteką mogę dodać kilka rzeczy tutaj.

Po pierwsze, użyłem podzbioru funkcji biblioteki z MSVC 2008 bez żadnych problemów.

Po drugie, niektórzy moi współpracownicy mają to na x86_64 (z MSVC2008 i MinGW). Po wielu cyklach testów wersji beta i kontroli jakości nie pojawiły się żadne problemy. Chociaż sam tego nie przetestowałem, nie mogę być tego pewien.

Tak więc wygląd rzeczy może być odpowiedni do użytku. Jedynym zastrzeżeniem jest to, że jeśli znajdziesz jakiś problem, będziesz na łasce niezbyt aktywnej listy mailingowej (a może chcesz zabrudzić sobie ręce za pomocą kodu źródłowego lub czegoś podobnego).

+0

Dzięki, to było dokładnie to, co chciałem wiedzieć. – Artyom

2

Nie mogę powiedzieć na pewno, a to może nie być to, co chcesz usłyszeć, ale biorąc pod uwagę, że ostatnia wersja jest opatrzona datą 2006, byłbym bardzo ostrożny przy używaniu tego w najnowszych kompilatorach. Może pracować, ale prawdopodobnie będzie to zależało od Ciebie. Wydaje się, że jest dużo dyskusji na temat tego, jak działa to w Cygwin i MinGW, ale niewiele dla MSVC i nic nie ma. Mogę znaleźć poza MSVC2005.

Ponadto, jeśli przejrzysz archiwa CVS, istnieje kilka cennych plików, które zostały zaktualizowane w ciągu ostatniego roku (większość to dwa do pięciu lat temu). Para, która ma datę sprzed mniej niż roku, ma opis "Komentarze i zmiany stylu kodu", co prowadzi mnie do przekonania, że ​​żadne z produktów nie było przez jakiś czas aktywnie rozwijane.

Teraz może się mylę i to jest po prostu niewiarygodnie dobrze napisany, stabilny produkt, ale moja wewnętrzna natura jest bardziej prawdopodobna, aby stwierdzić, że jest to jedna z bazilionów dobrych pomysłów, które odeszły z drogi.

I, patrząc na listy mailingowe, w ciągu pierwszych pięciu miesięcy 2010 r. Opublikowano tylko siedem wiadomości (najwcześniejsze z nich pozostały bez odpowiedzi przez cztery miesiące) i tylko 59 w całym 2009 r. Koloruj mnie sceptyczny, ale to nie wygląda na masywnie aktywną społeczność wsparcia.

Wydaje się, że patch dla 64-bitowego systemu Windows (patrz here w archiwum 2010), ale znowu, to wydaje się mieć problemy, które są bez odpowiedzi od lutego i to tylko wspomina o wsparcie dla MinGW:

... ta łatka (trochę szorstka i wymaga końcowego czyszczenia i trochę rozszerzenia do uruchomienia testowego makefile, aby umożliwić CROSS tutaj) umożliwia kompilację pthread dla celu x86_64-pc-mingw32.

To jest , a nie coś, czego użyłbym do mojego krytycznego oprogramowania.

Wiem, że oświadczyłeś, że nie jesteś zainteresowany ponownym wynalezieniem koła, ale możesz z łatwością wdrożyć blokady wielu czytników i zmienne warunkowe z bardziej podstawowych elementów pierwotnych - miałem nawet program do wielu czytników, który rozwiązał problem głodu napisać w sposób, który prawie dostał mi patent (nie, że zgadzam się z patentów na oprogramowanie, ale mój pracodawca twierdzi, że są wartościowe).

A jeśli tylko masz koło ma połowę swoich szprychy brakujące i jest strasznie odkształcone, może po prostu trzeba rozważyć :-)

W każdym razie, Vista i Server2k8 wprowadzone zarówno condition variables i slim reader/writer locks. Thread-local storage istnieje od Win2k. Wiem, że to nie pomoże, jeśli nadal będziesz musiał wspierać XP, ale będę patrzył w przyszłość.

A ponieważ zdaje się, że zdefiniowano przenośność jako "tylko dla systemu Windows", a wszystkie funkcje, które są dostępne, są dostępne w bieżących wersjach, nie jestem pewien, czy widzę przewagę, którą należy zachować przy użyciu pthreadów. Jeśli chcesz mieć możliwość przenoszenia do POSIX-a, to tak, ale nie wydaje się, żeby tak było w tym przypadku.

+0

Kilka punktów: skompilowałem swój projekt z wersją pthreadów MSVC, wykonuję testy jednostkowe i działa ...(MSVC 2008), więc zakładam, że jest dobrze debugowany, wspierany i istnieje od lat. (zauważ, że nie skompilowałem go, ale użyłem prekompilowanych plików binarnych dla MSVC). O TLS - Windows TLS API nawet nie pozwala ci dostarczyć destruktora dla wskaźnika TLS ... Musisz napisać dość skomplikowane rzeczy, aby działało. Również mając crirtical section/warunkowe zmienne nadal musisz zarządzać, jak pracować z blokadami rekursywnymi/nierekurencyjnymi. W przypadku pthread jest to licznik prostej flagi. – Artyom

+0

Uwaga: Potrzebuję pthreads, ponieważ jest to projekt przenośny, a system Windows jest jedną z platform, które chciałby obsługiwać. Muszę znać ograniczenia biblioteki pthreads, aby dowiedzieć się, co zadziała, a co nie. – Artyom

+0

Oczywiście źle zrozumiałem twój wymóg przenośności - wydawało się, że nie obejmuje platform innych niż Windows. Moja sugestia jest taka, że ​​uzyskasz bardziej ukierunkowaną odpowiedź, publikując na forach dyskusyjnych dla samego produktu, ponieważ dostałeś małą odpowiedź tutaj przez dwa dni, a my zwykle jesteśmy dość gadatliwi i uparty, gotowi ci pomóc Wiemy, co myślimy, z niewielkim podszeptem :-) Ale biorąc pod uwagę aktywność na ich pokładzie, być może trzeba będzie trochę poczekać. Jeśli masz już wszystko, to jesteś na najlepszej drodze. Nadal bym się martwił o wsparcie, ale to zależy od twojej sytuacji. – paxdiablo

0

Zaskoczony, że nikt nie zasugerował układania wątków Intela. Są bardzo aktywne i obsługują praktycznie wszystko, najnowsze wydanie jest niecałe dwa tygodnie temu, a funkcje C++ 0x, jeśli używasz zgodnego kompilatora.

http://software.intel.com/en-us/intel-tbb/#sysreq

+3

Czy to jest open source? AFAIK nie. Więc nie jestem zainteresowany. 2. Nie interesują mnie inne biblioteki. Raczej potrzebuję zrozumieć ograniczenia pthreads-win32 – Artyom

Powiązane problemy