ahoj lidicky, mam problem, resim ulohu, kdy mi producent generuje nahodna cisla a konzument je radi, za pouziti sdilene pameti a semaforu. jsem zacatecnik a nevim, jak prave se sdilenou pameti pracovat, jak do ni zapisovat (vice polozek), abych pak korektne precetl data v ni obsazena... zde je kod naseho pana profesora, ktery se snazim upravovat:
void producent(int semID)
{
int cislo;
int shareID;
int written;
char *mem;
char str[1024];
shareID = shmget((key_t) KEY, 1024, IPC_CREAT);
mem = (char *) shmat(shareID, NULL, 0);
printf("PRODUCENT: Shared memory initiated\n");
while (1)
{
printf("PRODUCENT: Generuji nahodne cislo...\n"); fflush(stdout);
cislo = getNahCis(1, 100);
printf("PRODUCENT: Vygenerovane cislo je: %d\n", cislo);
mem = cislo;
scanf("%s",str);
written = 0;
while (written == 0)
{
//printf("PRODUCENT: About to enter CS\n");
semDown(semID);
//printf("PRODUCENT: Critical section entered\n");
if (mem[0] == 0)
{
memset(mem, 0, strlen(str)+10);
mem[0] = strlen(str);
memcpy(mem+1,str,strlen(str));
written = 1;
printf("PRODUCENT: Written %s (len %d/%d)\n",mem+1, strlen(str), mem[0]);
}
//printf("PRODUCENT: About to leave critical section\n");
semUp(semID);
//printf("PRODUCENT: Critical section leaved\n");
}
};
};
void konzument(int semID)
{
int shareID;
char *mem;
char str[1024];
shareID = shmget((key_t) KEY, 1024, IPC_CREAT);
mem = (char *) shmat(shareID, NULL, 0);
printf("KONZUMENT: Shared memory initiated\n");
while (1)
{
pole[0] = mem;
printf("Radim vygenerovane cislo...");
seradPole(pole, 10);
//printf("KONZUMENT: About to enter critical section\n");
semDown(semID);
//printf("KONZUMENT: Critical section entered\n");
if (mem[0] != 0)
{
memcpy(str, mem+1, mem[0]+1);
printf("KONZUMENT : string read %s (len %d)\n", str, mem[0]);
mem[0] = 0;
if (strncmp(str,"end",3) == 0)
{
printf("KONZUMENT: Server stopping!!!\n");
semUp(semID);
shmdt(mem);
return;
}
}
//printf("KONZUMENT: About to leave critical section\n");
semUp(semID);
//printf("KONZUMENT: Critical section leaved\n");
sleep(1);
};
};
na ty cisla mam specialni metody, jak vidno z kodu, semafory snad taky funguji, jen ta pamet nevim jak pracuje a misto cisla mi predava -1 (eror?), navic bych potreboval predavat tech cisel vice...
muze mi pls nekdo objasnit zakulisi sdilene pameti? vubec nevim, co pod ty whily psat...?
Fórum › C / C++
Pomoc producent-konzument
Tedy jestli tohle je kód profesora, tak mu vyřiď ať si stanoví nějakou štábní kulturu(nejlépe K&R), tu ať dodržuje a až potom studentům píše nějaké kódy(nesrovnávat prosím s mým stylem psaní příspěvků). Jinak jsem to četl několikrát, ale stále zcela nerozumím co že to vlastně má dělat, přičemž nevím k čemu slouží tak polovina fcí, páč vypadají na UDF(nezkoušel jsem UTFG(vím jsem lazy :) )). Netuším co znamená těch pár konstant a jeden pravděpodobně typedef. Neškodil by podrobnější popis problému a příklad použití, takhle si myslím, že jsi vláknou odsoudil. K čemu? Toť otázka!
To D1ce: mno neviem ze ak by mu povedal "Pan profesor, preco nemate urcity styl kodu ?" Tak mu profak nedovli uz ani prist na hodinu/prednasku ...
radypala píše:#
# To D1ce: mno neviem ze ak by mu povedal "Pan profesor, preco nemate urcity styl kodu ?" Tak mu profak nedovli uz ani prist na hodinu/prednasku ...
Já bych to zkusil nějak "jemně". Třeba "slyšel jste někdy o štábní kultuře?", "a mohl byste nás nějakou naučit? Někde jsem slyšel, že dodržování určité štábní kultury značně zjednosuší orientaci v kódu", "Když srovnám vaše kódy s tím co jste nám řekl, dovolil bych si tvrdit, že mírně vybočují ze standardů." atd. Samozřejmě to nemusí mít takovýhle scénář, třeba se naštve hned po prvním dotazu, co já vím. Musíš fušovat do sociálního inženýrstvý a věř, že se ti to v budoucnu bohatě vyplatí.
Btw. Byl jsem na dnu otevřených dveří v ZČU a úvodní prezentace tamního učícího personálu mi připadal jako sjezd r3t4rdů. Ti lidi se dle mého vůbec neumí vyjadřovat, natož bych se divil, že něco naučí. Ten jehož proslov mi přišel jediný v normě byl jedné studentky, která přednesla svůj kladný názor na tamější univerzitu. Ty lidi asi budou opravdovými odborníky ve svých oborech, ale jejich projev IMHO patří pod průměrného učitele na střední škole. Neříkám jaký jsem dobrý rétorik, ale mě to snad chraň pánbu nikdy nebude živit.
asi to raději neřešte...
jinak jde o jeho kód s mými drobnými úpravami, ale k jinému problému (klient/server), tzn, že je potřeba předělat právě ta těla těch fcí...
v těle projektu jsou pak i fce na vytváření/ničení/atd... semaforů, generování čísel a řazení pole... jde mi o to, jak se v principu předává ("vytváří a přijímá") obsah sdílené paměti právě mezi těmato dvěma fcemi...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Pomoc.... nějaká chybka prosím pomoc - více v podrobném popisu — založil tkstudent
Pomoc, pomoc s úkolem (matice v Delphi) — založil maxikp
Pomoc — založil Matejko42
Moderátoři diskuze