Fórumok
Sziasztok!
c++ -ban mit "szokás" használni többszálú programok írására?
A boost library-ban lévő threadekkel van valakinek tapasztalata?
Igény, hogy lehetőleg gyors legyen és unix rendszereken menjen. (és legyen hozzá dokumentáció/példa kód esetleg)
Köszi!
Hozzászólások
pthread
pthread tökéletes lenne, már használtam is c-ben. most vagyok átszokóban c++-ra ezért végülis az a kérdés, hogy ott is pthread-ezzek bátran, vagy van rá valamilyen class vagy akarmi ami ott megszokott?
Lehet, hogy van. De minek, ha ott pthread. Atól nem lesz jobb a progid, hogy mindenféle classok refenciáját átolvasod, hozzászerkeszted ami majd meghívja helyetted pthread cuccait.
ezzel teljesen egyetértek. nem a bonyolítás a cél :-)
végülis inkább attól függ, hogy a program szempontjából mennyire kihasználható a c++-os megoldás
C++ programhoz is pthreadot használtam - a C++-os könyvtár úgyis csak wrapper lenne valami hasonló függvénykönyvtárra.
Akkor maradok én is pthread-nél. Köszönöm a válaszokat!
mutex-re érdemes írni egy osztályt, amit a védett metódusod első sorában létrehozol (stack-en) és ettől zárol (konstruktor), a metódust elhagyva pedig automatikusan elenged (destruktor). Asszem boost-ban van is ilyen.
Ha pedig nem lock-olós stílusban programozol, akkor érdemes valami szálvédett fifo-t létrehozni vagy használni a szálak közötti kommunikációra.
Persze ha összetettebb progit írsz szeretsz hetekig vadászni véletlenszerűen előjövő hibákra, akkor pthread-et használd C++ wrapper nélkül ;)
pl. író-olvasó problémára jó megoldás osztályokat használni, ahogy mondtad, hogy a kritikus szakaszt ilkyen objektummal védjük :)
Ha már C++, akkor ACE-t javaslom szemrevételezni.
az egy kurvajo dolog...
... ugyanakkor kurva bonyolult :-)
ha mar c++, akkor inkabb a 4.2 -es gccben leco std::tr1 -et
erdemes nezni, AFAIK abban van nativ cpps threading tamogatas
TR1-ben egesz biztosan nincs semmilyen threades dolog, mar csak azert sem, mert uj memoria modellt igenyelne (nativ tamogatas), amely a jelek szerint az uj C++0x-el erkezik majd.
Sajnos en mar hasznaltam ACE-t... nem nyerte el a tetszesem, szamos problema van vele:
+ robosztus, rengeteg support osztaly, szolgaltatas van benne
+ korrekt a referencia
+ nagyon szep elmeleti design pattern megtalalhato benne
0 wrapper a pthread / winsocket stb felett
- van hozza egy ketkotetes konyv, ami egy rakas szar. Sajnos annyira hulyen van szerkesztve, hogy egy peldat iteral vegig a ket koteten keresztul, es ertelmes dolgokat csak a masodik kotet vegen / kozepen talalsz. Ha utkozbe valamit nem ertesz meg teljesen, akkor siman elkepzelheto, hogy meg vagy love.
- Douglas C. Schmidt a diakjaival iratta meg a cuccokat, a minoseget ehez lehet merni (kodszinten)
- ha minden igaz lassan 20 eve hegesztik (es ennek minden hatranya nyomonkovetheto rajta)
En a boost::threadekkel meg melyebben nem foglalkoztam, mindenestre az mond valamit, hogy az uj C++ szabvany thread libje jelentos mertekben arra epul.
Amivel most kezdtem el ismerkedni az az Intel Threading Building Blocks-ja, ami viszont iszonyu szimpatikusnak tunt, van hozza egy kivalo konyv es egy kulturalt referencia. Alapvetoen ingyenesen elerheto, de extra optimializacio eseten fizetni kell (lib szintu optimalizaciorol van szo).
Jah meg 1 fontos dolog. Ez _nem_ egy wrapper a meglevo threades api-k fole, es mivel alapvetoen egy onmukodo kozosseg fejleszti (piaci szoftver), ezert a minosegre sem lehet panasz (elesbe meg nem hasznaltam, csak ismerkedes szintjen.
Ami az alapfilozofiajaban megfogott, hogy STL szemleletu, nem veletlenul a Stepanov irta az eloszot a konyvhoz. A masik, hogy elveti a thread alapu programozasi modelt, egy magasabb szintre, u.n. task szintre helyezi a hangsulyt es maga a lib mappeli szet a task szintu absztrakciokat thread szintre.
Ha ismerkedni kivansz valami joval, akkor en mindenkeppen vagy ezt (TBB) vagy a boost::thread-et javaslom, elobbit azert mert szamomra az jott ki, hogy bizonyos szempontbol paradigmavalto librol van szo, utobbit pedig azert mert a majdani 0x-es szabvany is erosen erre alapul (lib szintjen termeszetesen).