watki_c.pdf

(97 KB) Pobierz
11674078 UNPDF
Unix:programowaniezu˙zyciemw¸atk´ow
WitoldPaluszy´nski
witold@ict.pwr.wroc.pl
http://sequoia.ict.pwr.wroc.pl/ » witold/
Copyrightc ° 1999–2004WitoldPaluszy´nski
Allrightsreserved.
NiniejszydokumentzawieramateriaÃlydowykÃladunatematprogramowania
zu˙zyciemw , atk´ownormyPOSIXwsystemieUnix.Jestonudost , epniony
podwarunkiemwykorzystaniawyÃl , aczniedowÃlasnych,prywatnychpotrzebi
mo˙zeby´ckopiowanywyÃl , aczniewcaÃlo´sci,razemzniniejsz , astron , atytuÃlow , a.
W , atki:wprowadzenie
² W , atek(ang. thread )jestsekwencj , aoblicze´nrealizowan , awramach
jednegoprocesu.Zestaww , atk´ownale˙z , acydojednegoprocesuwykonuje
si , er´ownoleglewramachjegoprzestrzeniadresowej.
² Ponadtow , atkiwsp´oÃldziel , anast , epuj , acecechy:
± identyfikatoru˙zytkownikaigrupy
± bie˙z , ac , akartotek , edyskow , a
± otwartepliki
± handlerysygnaÃl´owiichdeklaracje
² Natomiastka˙zdyw , atekmasw´ojunikalnyidentyfikator,indywidualny
zestawatrybut´ow,mask , esygnaÃl´ow,priorytetitzw.konteks
obliczeniowy,tzn.stoswywoÃla´nprocedur,zestawrejestr´ow,itp.
² W , atektworzysi , efunkcj , a pthread_create() jakowywoÃlaniejakiej´s
funkcjiu˙zytkownika.
Unix:programowaniezw¸atkami
1
serwerwieloprocesowy:
serwerwielow , atkowy:
voidserve_client(intsock);
void*serve_client(void*);
voidmain(void){
intsockS,sockC;
structsockaddr_unadd;
voidmain(void){
intsockS,sockC;
structsockaddr_unadd;
pthread_tt;
sockS=socket(PF_INET,
SOCK_STREAM,0);
add.sun_family=AF_INET;/*...*/
bind(sockS,
(structsockaddr*)&add,
sizeof(add));
listen(sockS,5);
sockS=socket(PF_INET,
SOCK_STREAM,0);
add.sun_family=AF_INET;/*...*/
bind(sockS,
(structsockaddr*)&add,
sizeof(add));
listen(sockS,5);
while(1){
sockC=accept(sockS,0,0);
if(fork()==0){/*potomek*/
close(sockS);
serve_client(sockC);
exit(0);
while(1){
sockC=accept(sockS,0,0);
pthread_create(&t,NULL,
serve_client,
(void*)&sockC);
/*watkiniezamykajagniazdek*/
/*-satowspolnedeskryptory*/
}
close(sockC);/*rodzic*/
}
}
}
}
Unix:programowaniezw¸atkami
2
Ko´nczeniepracyw , atk´ow
² W , atekko´nczysi , egdy:
± zako´nczysi , efunkcjarealizuj , acago
± w , atekwywoÃlafunkcj , e pthread_exit()
± w , atekzostanieanulowanyfunkcj , a pthread_cancel()
± jedenzw , atk´owwykonafunkcj , e exec...
± zako´nczysi , eprocesmacierzystyw , atku
² Wchwilizako´nczeniaw , atkuzwalnianes , ajegoindywidualnestruktury
danych(np.stos),alenieglobalnestrukturyprocesu.
² Wchwilizako´nczeniaw , atkigeneruj , astatus,kt´orymo˙zeby´codczytany
przezw , atekmacierzysty,podobniejaktojestzprocesami.
² Je´slizako´nczysi , efunkcjagÃl´ownaw , atkutoskutekjesttakijakgdyby
w , atekwywoÃlaÃlfunkcj , e pthread_exit() zezwr´ocon , awarto´sci , ajako
argumentem.Wtenspos´obwszystkiejawnietworzonew , atkir´o˙zni , asi , e
odgÃl´ownegow , atkuprocesu,kt´oregozako´nczeniefunkcjigÃl´ownej
(main)jestr´ownowa˙znewywoÃlaniufunkcji exit() .
Unix:programowaniezw¸atkami
3
Zgłoś jeśli naruszono regulamin