Isletim Sistemleri Uygulama 7 - Ölümcül kilitlenme

Transkript

Isletim Sistemleri Uygulama 7 - Ölümcül kilitlenme
İşletim Sistemleri Uygulama 7
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Bilgisayar Mühendisliği
İstanbul Teknik Üniversitesi
34469 Maslak, İstanbul
10 Nisan 2013
BM
BLG 312
İşletim Sistemleri Uygulama 7
Bugün
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Catch-22
Joseph Heller’in Catch-22 adlı romanı bir çelişki üzerine kuruludur. Romanda, olayın
gerçekleşmesi bir şarta bağlıdır ancak o şartın gerçekleşmesi de aynı olaya bağlıdır.
I
Deneyimsiz biri iş bulamaz. İş bulamazsa deneyim kazanamaz.
I
Oy oranı düşük bir partiye oy verilmez. Oy verilmeyen partinin oy oranı artmaz.
I
İyi bir takım olmak için iyi futbolcular gerekir. İyi futbolcular iyi takımlara
transfer olurlar.
Benzer çelişkiler süreçleri ilgilendiriyorsa, işletim sistemi ölümcül kilitlenmeyle
karşılaşabilir.
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Catch-22
Joseph Heller’in Catch-22 adlı romanı bir çelişki üzerine kuruludur. Romanda, olayın
gerçekleşmesi bir şarta bağlıdır ancak o şartın gerçekleşmesi de aynı olaya bağlıdır.
I
Deneyimsiz biri iş bulamaz. İş bulamazsa deneyim kazanamaz.
I
Oy oranı düşük bir partiye oy verilmez. Oy verilmeyen partinin oy oranı artmaz.
I
İyi bir takım olmak için iyi futbolcular gerekir. İyi futbolcular iyi takımlara
transfer olurlar.
Benzer çelişkiler süreçleri ilgilendiriyorsa, işletim sistemi ölümcül kilitlenmeyle
karşılaşabilir.
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Catch-22
Joseph Heller’in Catch-22 adlı romanı bir çelişki üzerine kuruludur. Romanda, olayın
gerçekleşmesi bir şarta bağlıdır ancak o şartın gerçekleşmesi de aynı olaya bağlıdır.
I
Deneyimsiz biri iş bulamaz. İş bulamazsa deneyim kazanamaz.
I
Oy oranı düşük bir partiye oy verilmez. Oy verilmeyen partinin oy oranı artmaz.
I
İyi bir takım olmak için iyi futbolcular gerekir. İyi futbolcular iyi takımlara
transfer olurlar.
Benzer çelişkiler süreçleri ilgilendiriyorsa, işletim sistemi ölümcül kilitlenmeyle
karşılaşabilir.
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Basit bir ölümcül kilitlenme örneği
1
v o i d ∗ f a u l t y f u n c t i o n A ( v o i d ∗ a r g ){
p t h r e a d m u t e x l o c k (& l o c k 1 ) ;
p r i n t f ( ”\nA k r i t i k b o l g e 1 ’ de \n” ) ;
f f l u s h ( stdout ) ;
6
sleep (2);
p t h r e a d m u t e x l o c k (& l o c k 2 ) ;
p r i n t f ( ”\nA k r i t i k b o l g e 2 ’ de \n” ) ;
f f l u s h ( stdout );
11
p t h r e a d m u t e x u n l o c k (& l o c k 2 ) ;
p t h r e a d m u t e x u n l o c k (& l o c k 1 ) ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Basit bir ölümcül kilitlenme örneği
5
v o i d ∗ f a u l t y f u n c t i o n B ( v o i d ∗ a r g ){
sleep (1);
p t h r e a d m u t e x l o c k (& l o c k 2 ) ;
p r i n t f ( ”\nB k r i t i k b o l g e 2 ’ de \n” ) ;
f f l u s h ( stdout );
sleep (2);
p t h r e a d m u t e x l o c k (& l o c k 1 ) ;
p r i n t f ( ”\nB k r i t i k b o l g e 1 ’ de \n” ) ;
f f l u s h ( stdout ) ;
10
p t h r e a d m u t e x u n l o c k (& l o c k 1 ) ;
p t h r e a d m u t e x u n l o c k (& l o c k 2 ) ;
15
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Basit bir ölümcül kilitlenme örneği
i n t main (){
p t h r e a d t threadA , threadB ;
4
p t h r e a d m u t e x i n i t (& l o c k 1 , NULL ) ;
p t h r e a d m u t e x i n i t (& l o c k 2 , NULL ) ;
9
i f ( p t h r e a d c r e a t e (& t h r e a d A , NULL , f a u l t y f u n c t i o n A , NULL)){
p r i n t f ( ” i p l i k y a r a t i l i r k e n hata ” ) ;
exit (1);
}
14
i f ( p t h r e a d c r e a t e (& t h r e a d B , NULL , f a u l t y f u n c t i o n B , NULL)){
p r i n t f ( ” i p l i k y a r a t i l i r k e n hata ” ) ;
exit (1);
}
19
i f ( p t h r e a d j o i n ( t h r e a d A , NULL)){
p r i n t f ( ” i p l i k b i r l e s i r k e n hata ” ) ;
exit (1);
}
i f ( p t h r e a d j o i n ( t h r e a d B , NULL)){
p r i n t f ( ” i p l i k b i r l e s i r k e n hata ” ) ;
exit (1);
}
24
p t h r e a d m u t e x d e s t r o y (& l o c k 1 ) ;
p t h r e a d m u t e x d e s t r o y (& l o c k 2 ) ;
29
return 0;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Basit bir ölümcül kilitlenme örneği
v o i d ∗ f u n c t i o n A ( v o i d ∗ a r g ){
3
p t h r e a d m u t e x l o c k (& l o c k 1 ) ;
p r i n t f ( ”\nA k r i t i k b o l g e 1 ’ de \n” ) ;
f f l u s h ( stdout ) ;
sleep (5);
w h i l e ( p t h r e a d m u t e x t r y l o c k (& l o c k 2 ) ) {
p t h r e a d m u t e x u n l o c k (& l o c k 1 ) ;
sleep (1);
p r i n t f ( ”\nA b e k l i y o r \n” ) ;
f f l u s h ( stdout );
p t h r e a d m u t e x l o c k (& l o c k 1 ) ;
}
8
13
p r i n t f ( ”\nA k r i t i k b o l g e 2 ’ de \n” ) ;
f f l u s h ( stdout ) ;
18
p t h r e a d m u t e x u n l o c k (& l o c k 2 ) ;
p t h r e a d m u t e x u n l o c k (& l o c k 1 ) ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Basit bir ölümcül kilitlenme örneği
4
v o i d ∗ f u n c t i o n B ( v o i d ∗ a r g ){
sleep (1);
p t h r e a d m u t e x l o c k (& l o c k 2 ) ;
p r i n t f ( ”\nB k r i t i k b o l g e 2 ’ de \n” ) ;
f f l u s h ( stdout ) ;
sleep (4);
w h i l e ( p t h r e a d m u t e x t r y l o c k (& l o c k 1 ) ) {
p t h r e a d m u t e x u n l o c k (& l o c k 2 ) ;
sleep (1);
p r i n t f ( ”\nB b e k l i y o r \n” ) ;
f f l u s h ( stdout );
p t h r e a d m u t e x l o c k (& l o c k 2 ) ;
}
9
14
p r i n t f ( ”\nB k r i t i k b o l g e 1 ’ de \n” ) ;
f f l u s h ( stdout ) ;
19
p t h r e a d m u t e x u n l o c k (& l o c k 1 ) ;
p t h r e a d m u t e x u n l o c k (& l o c k 2 ) ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
#i n c l u d e <s t r i n g . h>
3
u s i n g namespace s t d ;
c l a s s P a i r{
private :
8
int a ;
int b;
pthread mutex t plock ;
13
public :
b o o l o p e r a t o r <(P a i r &) ;
b o o l o p e r a t o r >(P a i r &) ;
b o o l o p e r a t o r ==( P a i r &) ;
void setA ( i n t ) ;
void setB ( i n t ) ;
v o i d setAB ( i n t , i n t ) ;
Pair ( int , int ) ;
Pair ( void ) ;
˜ Pair ( ) ;
void p r i n t ( s t r i n g ) ;
void lock ( ) ;
void unlock ( ) ;
18
23
};
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
b o o l P a i r : : o p e r a t o r <( P a i r &o t h e r ){
i f ( t h i s−>a<o t h e r . a )
return true ;
4
i f ( t h i s−>a==o t h e r . a && t h i s−>b<o t h e r . b )
return true ;
9
return false ;
}
b o o l P a i r : : o p e r a t o r >( P a i r &o t h e r ){
14
i f ( t h i s−>a>o t h e r . a )
return true ;
i f ( t h i s−>a==o t h e r . a && t h i s−>b>o t h e r . b )
return true ;
19
return false ;
}
b o o l P a i r : : o p e r a t o r ==( P a i r &o t h e r ){
24
i f ( t h i s−>a==o t h e r . a && t h i s−>b==o t h e r . b )
return true ;
return false ;
29
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
1
P a i r : : P a i r ( i n t a , i n t b){
t h i s−>a=a ;
t h i s−>b=b ;
}
6
P a i r : : P a i r (){
t h i s−>a=( r a n d ( ) % 1 0 ) ;
t h i s−>b=( r a n d ( ) % 1 0 ) ;
}
11
v o i d P a i r : : p r i n t ( s t r i n g name){
c o u t << e n d l << name << ” : ( ” << t h i s−>a <<” , ”<<t h i s−>b<<” ) ”<<e n d l ;
}
16
v o i d P a i r : : s e t A ( i n t a ){
t h i s−>a=a ;
}
v o i d P a i r : : s e t B ( i n t b){
t h i s−>b=b ;
21
}
26
v o i d P a i r : : setAB ( i n t a , i n t b){
t h i s−>a=a ;
t h i s−>b=b ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
i n t main (){
p t h r e a d t mythreadA , mythreadB ;
4
P a i r∗ x=new P a i r ( 1 , 2 ) ;
P a i r∗ y=new P a i r ( 2 , 3 ) ;
P a i r∗ p L i s t []={ x , y };
9
i f ( p t h r e a d c r e a t e (&mythreadA , NULL , t h r e a d f u n c t i o n , ( v o i d ∗) p L i s t )){
p r i n t f (” error creating thread ” ) ;
abort ( ) ;
}
14
sleep (1);
x−>s e t A ( 5 ) ;
p L i s t [0]−> p r i n t ( ” x ” ) ;
19
i f ( p t h r e a d j o i n ( mythreadA , NULL)){
p r i n t f (” error j o i n i n g thread ” ) ;
abort ( ) ;
}
24
return 0;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
v o i d∗ t h r e a d f u n c t i o n ( v o i d ∗a r g ){
P a i r∗∗ p L i s t =( P a i r ∗∗) a r g ;
4
p L i s t [0]−> p r i n t ( ” x ” ) ;
p L i s t [1]−> p r i n t ( ” y ” ) ;
sleep (2);
9
i f ((∗ p L i s t [0]) >(∗ p L i s t [ 1 ] ) )
c o u t<<e n d l<<” x>y ”<<e n d l ;
i f ((∗ p L i s t [0]) <(∗ p L i s t [ 1 ] ) )
c o u t<<e n d l<<” x<y ”<<e n d l ;
14
i f ((∗ p L i s t [0])==(∗ p L i s t [ 1 ] ) )
c o u t<<e n d l<<” x=y ”<<e n d l ;
19
r e t u r n NULL ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
b o o l P a i r : : o p e r a t o r <( P a i r &o t h e r ){
t h i s −>l o c k ( ) ;
other . lock ( ) ;
4
i f ( t h i s −>a<o t h e r . a ){
t h i s −>u n l o c k ( ) ;
other . unlock ( ) ;
return true ;
}
9
i f ( t h i s −>a==o t h e r . a && t h i s −>b<o t h e r . b ){
t h i s −>u n l o c k ( ) ;
other . unlock ( ) ;
return true ;
}
14
t h i s −>u n l o c k ( ) ;
other . unlock ( ) ;
19
return false ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
1
P a i r : : P a i r ( i n t a , i n t b ){
t h i s −>a=a ;
t h i s −>b=b ;
p t h r e a d m u t e x i n i t (& p l o c k , NULL ) ;
}
6
Pair : : ˜ Pair (){
p t h r e a d m u t e x d e s t r o y (& p l o c k ) ;
}
11
v o i d P a i r : : s e t A ( i n t a ){
t h i s −>l o c k ( ) ;
t h i s −>a=a ;
t h i s −>u n l o c k ( ) ;
}
16
void Pair : : lock (){
p t h r e a d m u t e x l o c k (& p l o c k ) ;
}
21
void Pair : : unlock (){
p t h r e a d m u t e x u n l o c k (& p l o c k ) ;
}
BM
BLG 312
İşletim Sistemleri Uygulama 7
Ölümcül kilitlenme
Örnekler
Daha gerçekçi bir örnek
i n t main (){
2
p t h r e a d t mythreadA , mythreadB ;
P a i r∗ x=new P a i r ( 1 , 2 ) ;
P a i r∗ y=new P a i r ( 2 , 3 ) ;
7
P a i r∗ p L i s t []={ x , y };
P a i r∗ q L i s t []={ y , x };
i f ( p t h r e a d c r e a t e (&mythreadA , NULL , t h r e a d f u n c t i o n , ( v o i d ∗) p L i s t )){
p r i n t f (” error creating thread ” ) ;
abort ( ) ;
}
12
i f ( p t h r e a d c r e a t e (&mythreadB , NULL , t h r e a d f u n c t i o n , ( v o i d ∗) q L i s t )){
p r i n t f (” error creating thread ” ) ;
abort ( ) ;
}
17
sleep (1);
22
i f ( p t h r e a d j o i n ( mythreadA , NULL)){
p r i n t f (” error j o i n i n g thread ” ) ;
abort ( ) ;
}
27
i f ( p t h r e a d j o i n ( mythreadB , NULL)){
p r i n t f (” error j o i n i n g thread ” ) ;
abort ( ) ;
}
32
return 0;
}
BM
BLG 312

Benzer belgeler

Isletim Sistemleri Uygulama 6 - Ninova

Isletim Sistemleri Uygulama 6 - Ninova İşletim Sistemleri Uygulama 6 Uygulamada adım adım semafor kullanımı Örnek Senkronizasyon Problemleri - H2 O Örnek Senkronizasyon Problemleri - Sushi Bar Örnek Senkronizasyon Problemleri - Par...

Detaylı