Aktív témák
-
Miracle
senior tag
shared memoryt kulon processzek kozott egyszeruen tudsz letrehozni anonim memory-mapekkel.
[link]
de mielott nagyon belemelegszel a parhuzamos programozasba gondold at ketszer is, hogy szukseged van-e neked erre, hacsak nincs valodi legalabb ketutas renszered, es nem szamolsz TENYLEG nagy szamokat akkor amit igy irsz joval lassabb lesz, mint ha egy jol optimalizalt linearis kodot keszitenel. persze ha a parh. program elkeszitese a lenyeg, akkor nem szoltam -
Jester01
veterán
Ez egyáltalán nem mûködhet, mert a fork után már külön memóriaterülettel rendelkeznek a processzek (technikailag copy-on-write, de ez nem érdekes).
Szóval az nChild a gyerekprocesszben növekszik, nem a szülõben. Magyarul rossz helyen van, az if(fork() == 0) else ágába kell tenni.
(A kódrészletbõl nem látszik, de a tomb az ugye shared memory?) -
Blackmate
őstag
Huhh, ennyire nem vagyok benne. Kitaláltam egy dolgot: nyílvántartom a processzek számát. Ha elfogynak (nullák lesznek), akkor kiiratom őket. Csak valamiért nem akar működni. Egyszerűen nem nullláz ki semmit. Mi lehet a baj vele?
A kód lényege (a tömb nem prím elemeinek nullázása):unsigned long int nChild = 0; //gyerek processzek szama
unsigned long int j=0; //ciklusvaltozo
unsigned long int kFelso = ceil((double)(sqrt(felso)));
//elegendo a felso hatar negyzetgyokeig vizsgalni a szamokat
//na ez a kFelso az, csak epp felfele van kerekitve
for (i=0;i <= kFelso; i++)
{
if (nChild <= MAX_PROC)
{
if (fork() == 0)
{
nChild++;
for (j=0; j <= kFelso; j++)
{
if (tomb[j] % i == 0 && tomb[j] != i)
{
//szemaforral nullazom a tomb elemeit
SemBuf.sem_op = -1;
semop(semID, &SemBuf, 1);
tomb[j] = 0;
SemBuf.sem_op = 1;
semop(semID, &SemBuf, 1);
}
exit(0);
}
}
}
else
{
wait(NULL);
nChild--;
}
}[Szerkesztve]
-
Blackmate
őstag
Nem találtam ilyen témát, úgyhogy nyitottam egyet.
Van egy beadandó feladatom, amiben egy előre megadott intervallumban prímszámokat kell keresnem, és a végeredményt kiiratni.
Maga az algoritmus meg van: intervallum elemeit egy dinamikus tömbben tárolom, és a 2,3,4...-el való oszthatóságát vizsgálom, és ami maradék nélkül osztható azt kinullázom.
Attól IPC a feladat, hogy egyszerre több proceszt indítok (max. 10-et), ami vizsgálja az oszthatóságot.
A problémám az, hogy az eredményeket hamarabb kiíratom, mint ahogy az összes kis gyerekprocessz befejeződött volna, így egymás után futtatva más-más eredményt kapok.
Abban kérnék tanácsot, hogy hogyan tudnám várakoztatni azt a program részt - ami a kiíratással foglalkozik - , addig amíg az összes gyerekprocessz befejeződött?
Aktív témák
- QuantaPlex T42S-2U
- Lenovo ThinkPad P1 Gen 3 UHD, Érintőkijelző, i7-10875H, 32GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV G
- Lenovo ThinkPad L490 FHD, TOUCH, I5-8365U CPU, 16GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV GARANCIA!
- Lenovo ThinkPad T490 FHD, I5-8365U CPU, 16GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV GARANCIA!
- 2020 M1 macbook pro 8/256GB elado/cserelheto
- BESZÁMÍTÁS! ASUS B450M R5 3500X 16GB DDR4 500GB SSD RTX 2060 Super 8GB Zalman N5 Zalmann 600W
- HIBÁTLAN iPhone 13 Pro 256GB Sierra Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3022
- Lenovo LOQ (15IAX9) - Intel Core i5 i5-12450HX, RTX 4060 (3db érhető még el)
- Telefon felvásárlás!! iPhone 14/iPhone 14 Plus/iPhone 14 Pro/iPhone 14 Pro Max
- Honor 200 256GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: FOTC
Város: Budapest