Szálkészlet-megvalósítást keresek C ++ 11-es menetes létesítmények alapján. A könyvtár lehetőleg csak fejléc legyen. A licencnek BSD vagy MIT stílusú megengedő típusú licencnek kell lennie, azaz nincs GPL.
Szálkészlet-megvalósítást keresek C ++ 11-es menetes létesítmények alapján. A könyvtár lehetőleg csak fejléc legyen. A licencnek BSD vagy MIT stílusú megengedő típusú licencnek kell lennie, azaz nincs GPL.
Úgy tűnik, van egy GitHub, aki egy kis könyvtárat fejlesztett ki a C ++ 11 számára.
Ez is csak egy központi fejlécfájl (nincs hozzáadható cpp fájl), és illeszkedik a licenc követelményeihez (valójában megengedő ingyenes szoftverlicencet használ)
Észrevettem, hogy ezt a kérdést alapvetően ugyanazt akarom feltenni, kivéve, hogy már néhányat észrevettem, és nem csupán felsorolásként szeretnék megfelelő ajánlást / áttekintést kapni az erősségekről és gyengeségekről. De egyelőre itt van a felsorolásom:
Most nincs felhasználta ezek egyikét, és nem tudja leírni a köztük lévő különbségeket, de nagyon szeretné, ha valaki, aki rendelkezik a szálkészletek használatával, ezt megtenné (külön válaszként).
ThreadPool
A ThreadPool egy egyszerűen használható fejlécű szálkészlet könyvtár, amely C ++ 11 szálas API-t használ, és nincs GPL .
szálkészlet-megvalósítást keresek a C ++ 11 szálkezelési lehetőségek alapján.
Ez egyfajta általános leírás. Alapvetően legalább kétféle szálkészlet létezik. Először, és sokkal egyszerűbbek, lehetővé teszi néhány funkció (objektum) által ábrázolt feladat (feladat) lehívását, és ezeket a feladatokat futó szálakhoz rendelheti, amelyek futtatják ezeket a funkciókat mindaddig, amíg be nem fejezik . Ha nem tévedek, az összes javasolt megoldás így működik.
Ezen egyszerű megoldások fő hátránya azonban az, hogy nem képesek felfüggeszteni és folytatni a feladatokat . Ez minden, csak nem könnyű, és ezt például az OpenMP vagy a TBB biztosítja. Tekintsük a legegyszerűbb példát a Fibonacci szám kiszámításához az OpenMP segítségével:
int Fib (int n) {if (n < 2) return n; int x, y; #pragma omp feladat megosztva (x) x = Fib (n - 1); #pragma omp feladat megosztva (y) y = Fib (n - 2); #pragma omp taskwait return x + y;}
Ebben az esetben a Fib
függvény fel van függesztve a #pragma omp taskwait
sorban és a gyermekfeladatok (a feladatban létrehozott feladatok) befejezése után folytatják (opcionálisan akár különböző szálakon is). Ezért szükség van valamilyen mechanizmusra, hogy "kiugorjon" a funkcióból és újra "beugorjon" (a C ++ 20 koroutinjai segítenek?).
Ami a tiszta C ++ -ot illeti, két szálkészlet-megvalósítást találtam, amelyek kissé összetettebbek:
cpp-taskflow - úgy tűnik, hogy csak fejléc. Van, amit dinamikus feladat képességnek hívnak, amely a példák szerint új feladatok létrehozását teszi lehetővé a futó feladatokon belül. De nem találom azt a lehetőséget, hogy megvárjam a gyermeki feladatok elvégzését.
dougbinks / enkiTS - nem csak a fejléc. Van némi várakozási mechanizmus, de azt gondolom, hogy "blokkol" abban az értelemben, hogy a várakozási feladatokat végrehajtó szál nem egy másik feladat végrehajtása a várakozás során.
Azonban úgy találtam meg ezeket a könyvtárakat, hogy rendszeres feladat oponokat kerestem a modern C ++ rendszerben, és be kell vallanom, hogy nem sokat tudok róluk. Jó lenne, ha bárki további részleteket tudna megadni.