Hirdetés
- A karmos/ujjbegyes fogásokkal nyomulók örömére megjött az Arye szénszálas egere
- ISA dokumentáció árulkodik az Intel közelgő magjairól
- TMR technológiás Keychron billentyűzet, ezúttal teljesen kerámiából
- Bemutatkoztak az NZXT legfrissebb, C Gold Core sorozatú tápjai
- Ha eGPU-ról van szó, akkor az OCuLink a teljesítménybajnok
-
PROHARDVER!
Új hozzászólás Aktív témák
-
Forest_roby
őstag
válasz
Bazsesz #2360 üzenetére
Hi!
Szemaforok: légyeg, ha egy erőforrást egyszerre két folyamat akar használni, akkor ütköznének a folyamatok, -biztos hogy hibás eredmények születnének. Most cifrázhatnám, hogy milyen sulyos hibák történhetnének, de el tudjátok képzelni... No, első gondolatra válozókkal meglehetne oldani, a problémát ( ezt most nem részletezem ) , de az a probléma, hogy ott ugyanúgy összeakadna a progi, ez nem megoldás. A szemafórok az oprendszer (LINUX) által biztosított olyan változók, amiknél nem fordulhat elő az, hogy egszerre használják ugyanazt az eszközt... ( hogy ezt hogy érik el, az legyen egy okosabb embernek az összefoglalója ).
Szóval ilyen problémák megoldására a szemaforokat kell használni....
Használat:
A szemaforokon két műveletet értelmezünk:
Csökkentés és Növelés
A szemafor értéka 0 és 1 lehet. Ha 0 -akkor blokkolt a folyamat és ha 1 akkor szabad a futás.
Csökkentés:
Amikor a progi belépni akar a kritikus szakaszba akkor fog csökkenteni, ha a szemafor 0 volt akkor várólistára kerűl a folyamat, ha 1 volt akkor a folyamat lefut és a szemafor 1-ről 0-ra csökken.
Növelés:
A folyamat végrehajtása után történik meg. A szemafort 1-re álitja. Ha lenne olyan folyamat, amely e miatt a szemafor miatt volt blokkolt állapotban, arról a Linux gondoskodik, hogy az felszabaduljon a blokkolt állapotból.
(dióhélyban /majd vissza kell olvasnom, hogy mennyi baromságot írtam ide le....)
int semget(...)
int semctl(...)
int semop(...)
fv-eknek érdemes utánna nézni, sajna a progi amit tudnék adni 125 soros és most nincs kedvem begépelni, de google-on biztos sokat találsz....
remélem azért nem volt teljesen hasztalan ezt begépelnem...
Sok sikert!
[Szerkesztve] -
Robaj
addikt
válasz
Bazsesz #2360 üzenetére
Vmi ilyesmi:
#define N 100
typedef int semaphore;
semaphore mutex=1;
semaphore empty=N;
semaphore full=0;
void producer(void)
{ int item;
while (TRUE){
produce_item(&item);
down(&empty);
down(&mutex);
enter_item(item);
up(&mutex);
up(&full);
}
}
void consumer(void)
{
int item;
while (TRUE) {
down(&full);
down(&mutex);
remove_item(&item);
up(&mutex);
up(&empty);
consume_item(item);
}
}
Előadásjegyzetben van/volt, hámozz ki belőle vmit. Nekem nem sikerült. De 2-es megvan. -
Jester01
veterán
válasz
Bazsesz #2360 üzenetére
A szemaforok tulajdonképpen számlálók amik általában azt jelentik, hogy valami X dologból rendelkezésre áll valamennyi. A számláló növelése nem várakozik, ez csak azt jelenti, hogy több X áll rendelkezésre. Ha most jön valaki, hogy neki kellene valamennyi X, akkor a rendelkezésre álló mennyiséget az igényelt mennyiséggel csökkenteni kell, illetve ha éppen nincs elegendő, akkor várni kell.
A te feladatodra rátérve: 2 szemaforra lesz szükség, mivel a probléma szimmetrikus. Az egyik jelzi, hogy az A program írt valamit amit a B kiolvashat, illetve fordítva.
A program:
write(); /* írunk valamit */
sem_up(A); /* jelezzük, hogy A írt */
sem_down(B); /* várunk amíg B jelzi, hogy írt */
read(); /* kiolvassuk */
B program:
sem_down(A); /* várunk amíg A jelzi, hogy írt */
read(); /* kiolvassuk */
write(); /* írunk valamit A-nak */
sem_up(B); /* jelezzük, hogy B írt */ -
shev7
veterán
válasz
Bazsesz #1771 üzenetére
C ben nincs olyan hogy string, nem? char*-ot hasznalsz/unk. Innen meg egyszeru, mivel a tombok ugy mukodnek mint a pointerek, ezert ha van egy olyanod hogy char* string1, akkor a string1[ 0 ] a string elso karakteret adja vissza, es igy tovabb. Persze figyelni kell a hosszra, de azt meg lekerdezed a stlen fuggvennyel.
A masik modszer, amihez semmit nem kell gondolkodniaz strncmp fv. Ez ket stringbol hasonlitja ossze az elso n karaktert ( strncmp(char*,char*,int) ) 0val ter vissza, ha egyezes van.
[Szerkesztve] -
bdav
őstag
válasz
Bazsesz #1767 üzenetére
na ezt a hszedet nem tudom értelmezni. de ha az eredeti problémát jól vágom akkor annyi kell h. a '\n' '\t' és ' ' karaktereket számold. amit írtál progi az minden karakter előfordulását nézi, tök feleslegesen. (ráadásul külön függvényt kér)
én így írnám meg:
void charCount(char* fileName)
{
FILE* f=fopen(''fileName'', ''r'');
int s=0;
int spaceCount=0;
int nCount=0;
int tCount=0;
do
{
s=fgetc(f);
if(s=='\n') nCount++;
if(s=='\t') tCount++;
if(s==' ') spaceCount++;
} while(s!=EOF);
printf(''\\n száma: %d'\n\\t száma: %d\nspace száma: %d', nCount, tCount, spaceCount);
}
mod: amit te irtál az is kb. ugyanezt teszi, csak megszámol mindent feleslegesen. ja és a while és for ciklust megint felcserélted. Kiírásnál meg nem lennék benne biztso hogyha a \n-t karakterként írod ki akkor nem tesz e inkább ujsort (ezért írok én pl. \\-t). egy iffel rá tudsz szürni mondjuk és akkor csak a szükségeseket írja ki (if(c[ i ]=='\n') printf(''\\n száma: %d'', c[ i ]);)
[Szerkesztve]
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
- PlayStation 5
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Érintésnélküli fizetési megoldások - PayPass via NFC
- Telekom mobilszolgáltatások
- Kodi és kiegészítői magyar nyelvű online tartalmakhoz (Linux, Windows)
- Nyaralás topik
- sziku69: Szólánc.
- Egér probléma
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Mini PC
- További aktív témák...
- ÚJ Dobozos Lenovo ThinkPad T460 i5-6300U / 8GB / 256GB SSD / Magyar billentyűzet
- Egyedi Keycapek
- Apple iPhone 14 Pro Max 256 GB Space Black (független, iSTYLE vásárlás)
- Apple MacBook Pro 13 (2016, Touch Bar) ezüst, i5 / 8GB / 512GB SSD / 4x Thunderbolt 3
- iPhone 17 Pro Max 256GB kozmosznarancs apple.hu
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7500F 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- Honor Pad X9 / 4GB RAM 128 GB / Kártyafüggetlen / 12Hó Garancia
- Sony MHC-V43D Aktív hangfal, party hangszóró
- 2 db (130 / 131) - Lenovo Legion Pro 7 (16IRX9H) - Intel Core i9-14900HX, RTX 4080
- ÁRGARANCIA!Épített KomPhone i5 10400F 16/32GB RAM RX 7600 8GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest