Hirdetés
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- sziku69: Szólánc.
- eBay-es kütyük kis pénzért
- GoodSpeed: Ebes, a megtervezett falu!
- GoodSpeed: Nem vénnek való vidék - Berettyóújfalu
- sziku69: Fűzzük össze a szavakat :)
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- Luck Dragon: MárkaLánc
- droidic: Windows 11 önállóság nélküli világ: a kontroll új korszaka
-
LOGOUT

Ú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 gondolkodni
az 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!
- Telekom TV SmartBox: szolgáltatói set-top box alacsony korlátokkal
- Bemutatkozott a Poco X7 és X7 Pro
- Kedvenc zene a mai napra
- Milyen autót vegyek?
- Kamionok, fuvarozás, logisztika topik
- OLED TV topic
- Vezetékes FEJhallgatók
- Okos Otthon / Smart Home
- Nyíregyháza és környéke adok-veszek-beszélgetek
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- További aktív témák...
- Gamer PC - Ryzen 7 5700X / RX 9060 XT 16GB / B550 WIFI / 32GB RAM 3600Mhz / 1TB M.2 SSD / 650W GOLD
- Canon EOS M50 Mark II kit obival, 2db eredeti aksival, 1000 expoval, gyári dobozában, táskával.
- Hibátlan, 32" (81 cm) méretű Panasonic Viera LCD tv eladó
- ASRock H61M-GE LGA 1155 alaplap
- Eladó Komplett gép
- AKCIÓ! LG UltraFine 27" 5K IPS 99% DCI-P3 1 év garancia
- Logitech Webkamera MeetUp 120 -os látótér, mikrofon, 4K Ultra HD
- Csere-Beszámítás! Gamer Notebook! MSI Thin 15 B12UC! I5 12450H / RTX 3050 / 16GB DDR4 / 512GB SSD!
- 205km-t futott! Dualtron Togo limited elektromos roller
- Apple iPhone 13 / 128GB / Kártyafüggetlen / 12Hó Garancia / Akku: 100%
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: NetGo.hu Kft.
Város: Gödöllő



