c++ thread

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

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 ;)

Ha már C++, akkor ACE-t javaslom szemrevételezni.

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).