Pomoc producent-konzument – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pomoc producent-konzument – C / C++ – Fórum – Programujte.comPomoc producent-konzument – C / C++ – Fórum – Programujte.com

 

jakoubecek
~ Anonymní uživatel
2 příspěvky
22. 1. 2007   #1
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
23. 1. 2007   #2
-
0
-

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!

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
Radoslav Pala0
Super člen
23. 1. 2007   #3
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Jakub0
Super člen
24. 1. 2007   #4
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Věřím, že můžete v životě získat všechno, co budete chtít, když budete pomáhat druhým lidem, aby dostali to, co si přejí oni. - Zig Ziglar TOPlist
jakoubecek
~ Anonymní uživatel
2 příspěvky
29. 1. 2007   #5
-
0
-

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

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 65 hostů

Podobná vlákna

Pomoc — založil Michael

Pomoc if — založil Priwi

Pomoc — založil Matejko42

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý