ÿþ6 2 W g Bb j z y k a C
I V . P r o g r a m o w a n i e w s p ó Bb i e |n e
J z y k C n i e z a w i e r a o c z y w i [c i e |a d n y c h m e c h a n i z m ó w u m o |l i w i a j c y c h p r o g r a -
m o w a n i e w s p ó Bb i e |n e ( n p . t a k i c h , j a k w j z y k u A d a ) . W r o z d z i a l e n i n i e j s z y m
p r z e d s t a w i i m p l e m e n t a c j m o d u Bu u m o |l i w i a j c e g o p s e u d o - w s p ó Bb i e |n e w y k o -
n y w a n i e f u n k c j i w j z y k u C . T e r m i n " p s e u d o - w s p ó Bb i e |n o [" j e s t t u t a j b a r d z o
w a |n y , g d y | w |a d n y m w y p a d k u z a s t o s o w a n e r o z w i z a n i e n i e u m o |l i w i a r e a l i z a -
c j i r z e c z y w i s t e j w s p ó Bb i e |n o [c i n a m a s z y n a c h w i e l o p r o c e s o r o w y c h . P o m i m o t e g o ,
d l a z w i k s z e n i a c z y t e l n o [c i o p i s u , b d w d a l s z e j j e g o c z [c i u |y w a B t e r m i n ó w
" w s p ó Bb i e |n y " o r a z " p s e u d o - w s p ó Bb i e |n y " w y m i e n n i e .
I m p l e m e n t a c j a w s p o m n i a n e g o m o d u Bu b d z i e p r e t e k s t e m d o z a s t o s o w a n i a w i e l u
t e c h n i k o p i s a n y c h w p o p r z e d n i c h r o z d z i a Ba c h t e j k s i |k i . D l a t e g o t e | p r z e d p r z y -
s t p i e n i e m d o c z y t a n i a t e g o r o z d z i a Bu p o l e c a m p r z e c z y t a n i e r o z d z i a Bó w p o -
p r z e d n i c h . Z d r u g i e j s t r o n y i m p l e m e n t a c j a t a j e s t p r z y k Ba d e m n i e c o d z i e n n e g o
s t y l u p r o g r a m o w a n i a w j z y k u C , c h a r a k t e r y z u j c e g o s i b a r d z o i n t e n s y w n y m
u |y c i e m p r e p r o c e s o r a .
W s p ó Bb i e |n e w y k o n y w a n i e f u n k c j i n i e b d z i e r e a l i z o w a n e n a p o z i o m i e s y s t e m u
o p e r a c y j n e g o l e c z n a p o z i o m i e p r o g r a m u w C , i b d z i e o n o w y k o n a n e
z w y k o r z y s t a n i e m j e d y n i e e l e m e n t ó w j z y k a s t a n d a r d o w e g o . O z n a c z a t o m i d z y
i n n y m i , |e m o d u B b d z i e p r z e n o [n y z a r ó w n o n a r ó |n e k o m p i l a t o r y ( n a l e |y j e d -
n a k o s t r o |n i e s t o s o w a o p c j e o p t y m a l i z a c j i ) j a k i r ó |n e p l a t f o r m y s p r z t o w e . I n -
n k o n s e k w e n c j r e a l i z a c j i p r z e Bc z a n i a z a d a D c a Bk o w i c i e n a p o z i o m i e j z y k a C
j e s t " g r u b o z i a r n i s t o [" z r e a l i z o w a n e j p s e u d o - w s p ó Bb i e |n o [c i . J e |e l i d w a ( l u b
w i c e j ) z a d a n i a ( f u n k c j e , p r o g r a m y ) m a j b y w y k o n y w a n e w s p o s ó b w s p ó B-
b i e |n y n a j e d n y m p r o c e s o r z e , t o w r z e c z y w i s t o [c i n a z m i a n w y k o n y w a n e s
p e w n e m a Be f r a g m e n t y t y c h z a d a D. N a j m n i e j s z t a k c z s t k m o |e b y i n s t r u k -
c j a p r o c e s o r a , k t ó r a n i e m o |e j u | b y p o d z i e l o n a . T a k i e r o z w i z a n i e b y Bo b y
p s e u d o - w s p ó Bb i e |n o [c i " d r o b n o z i a r n i s t " i g w a r a n t o w a Bo b y m a x y m a l n e z Bu -
d z e n i e r z e c z y w i s t e j w s p ó Bb i e |n o [c i . W p r z e d s t a w i o n y m p o n i |e j m o d u l e n a j -
m n i e j s z c z [c i f u n k c j i , k t ó r a m u s i b y w y k o n a n a , z a n i m s t e r o w a n i e z o s t a n i e
p r z e k a z a n e d o i n n e j f u n k c j i , j e s t j e d n a i n s t r u k c j a ( a n g . s t a t e m e n t ) j z y k a C .
1 . D l a c z e g o w s p ó Bb i e |n o [?
K l a s y c z n e p r o g r a m y w s p ó Bb i e |n e s w y k o n y w a n e n a m a s z y n a c h w i e l o p r o c e s o r o -
w y c h . C e l e m z a s t o s o w a n i a r ó w n o l e g By c h k o m p u t e r ó w i r ó w n o l e g By c h p r o g r a m ó w
j e s t z m n i e j s z e n i e z Bo |o n o [c i c z a s o w e j r o z w i z y w a n e g o z a d a n i a . J e s t s p r a w
o c z y w i s t , |e w p r z y p a d k u p r o g r a m u w y k o n y w a n e g o p s e u d o - w s p ó Bb i e |n i e n a
k o m p u t e r z e j e d n o p r o c e s o r o w y m n i e m o |n a l i c z y n a z w i k s z e n i e p r d k o [c i o b l i -
c z e D. C o w i c e j , w y k o n a n i e w t a k i m p r z y p a d k u k i l k u z a d a D m u s i t r w a d Bu |e j n i |
t r w a Bo b y w y k o n a n i e t y c h z a d a D s e k w e n c y j n i e j e d n o p o d r u g i m . D z i e j e s i t a k
d l a t e g o , |e o p r ó c z k o d u z a d a D p r o c e s o r m u s i w y k o n y w a p e w i e n k o d z w i z a n y
I V P r o g r a m o w a n i e w s p ó Bb i e |n e 6 3
z i c h p r z e Bc z a n i e m . M o |n a b y w t a k i m r a z i e p o w i e d z i e , |e p s e u d o -
w s p ó Bb i e |n o [ j e s t s z t u k d l a s z t u k i . N i e j e s t t o p r a w d , a n a j l e p s z y m n a t o d o w o -
d e m j e s t p o p u l a r n o [ p r o g r a m ó w t y p u D E S Q v i e w c z y W i n d o w s , u m o |l i w i a j c y c h
p s e u d o w s p ó Bb i e |n e w y k o n y w a n i e p r o g r a m ó w . T w i e r d z e n i e , |e w i e l o z a d a n i o w o [
r e a l i z o w a n a n a j e d n y m p r o c e s o r z e n i e m o |e p r z y n i e [ z y s k ó w c z a s o w y c h j e s t
p r a w d d o p ó t y , d o p ó k i z a d a n i a c a By c z a s w y m a g a j p r a c y p r o c e s o r a .
W r z e c z y w i s t o [c i c z s t e s s y t u a c j e , g d y w i k s z o [ c z a s u p r a c y z a d a n i a n i e j e s t
z u |y w a n a n a p r a c p r o c e s o r a . N a p r z y k Ba d o p e r a c j e n a p a m i c i z e w n t r z n e j s
z w y k l e n a t y l e w o l n e w p o r ó w n a n i u z s z y b k o [c i p r o c e s o r a , |e m ó g Bb y o n r ó w n o -
c z e [n i e w y k o n y w a i n n p r a c . J e s z c z e b a r d z i e j s k r a j n y m p r z y p a d k i e m j e s t c z e -
k a n i e p r z e z z a d a n i e n a d a n e w p r o w a d z a n e p r z e z u |y t k o w n i k a z k l a w i a t u r y . J e |e l i
j e d n o z z a d a D u t k n Bo w t a k i m w s k i m g a r d l e , p r o c e s o r m o |e p o [w i c i s w ó j c z a s
n a w y k o n a n i e i n n y c h z a d a D. M o |n a t o z r e a l i z o w a w Ba [n i e p o p r z e z p s e u d o -
w s p ó Bb i e |n o [.
Z y s k i w a n i e c z a s u w t a k i c h s y t u a c j a c h n i e j e s t j e d n a k j e d y n y m m o t y w e m z a s t o -
s o w a n i a w i e l o z a d a n i o w o [c i . P r o g r a m y w y k o n u j c e k i l k a z a d a D n a r a z m o g b y
b a r d z o w y g o d n e d l a u |y t k o w n i k a . P r z y k Ba d e m n i e c h b d z i e e d y t o r t e k s t ó w z a p i -
s u j c y c o j a k i [ c z a s r e d a g o w a n y t e k s t " w t l e " .
J a k j u | w c z e [n i e j w s p o m n i a Be m , r e a l i z a c j a w s p ó Bb i e |n e g o w y k o n y w a n i a f u n k c j i
b d z i e p o l e g a Ba n a w y k o n y w a n i u n a z m i a n k o l e j n y c h f r a g m e n t ó w k a |d e j
z f u n k c j i . D o p r z e k a z y w a n i a s t e r o w a n i a z j e d n e j f u n k c j i d o d r u g i e j p o s Bu | n a m
f u n k c j e s e t j m p i l o n g j m p .
2 . F u n k c j e s e t j m p i l o n g j m p
D e k l a r a c j e t y c h f u n k c j i w y g l d a j n a s t p u j c o :
i n t s e t j m p ( j m p _ b u f ) ;
v o i d l o n g j m p ( j m p _ b u f , i n t ) ;
S o n e f u n k c j a m i s t a n d a r d o w y m i . I c h d e k l a r a c j e , o r a z d e k l a r a c j a t y p u j m p _ b u f
z n a j d u j s i w p l i k u n a g Bó w k o w y m " s e t j m p . h " . S Bu | o n e d o z a p a m i t a n i a ,
a n a s t p n i e o d t w o r z e n i a s t a n u p r o g r a m u . W p r a k t y c e o z n a c z a t o , |e f u n k c j a l o n -
g j m p u m o |l i w i a w y k o n a n i e s k o k u d o j a k i e g o [ m i e j s c a , w k t ó r y m s t a n p r o g r a m u
z o s t a B w c z e [n i e j z a p a m i t a n y p r z y p o m o c y f u n k c j i s e t j m p . J a k w s k a z u j e s a m a
n a z w a f u n k c j i , j e s t t o s k o k d a l e k i , n i e o g r a n i c z o n y d o w n t r z a f u n k c j i ( j a k s k o k
p r z y p o m o c y i n s t r u k c j i g o t o . j m p _ b u f d e f i n i u j e s t r u k t u r , w k t ó r e j p r z e -
c h o w y w a n e s i n f o r m a c j e o s t a n i e p r o g r a m u .
W y w o Ba n i e f u n k c j i s e t j m p p o w o d u j e z a p a m i t a n i e w z m i e n n e j t y p u j m p _ b u f ,
p r z e k a z a n e j d o n i e j j a k o a r g u m e n t , i n f o r m a c j i o s t a n i e p r o g r a m u . F u n k c j a z w r a c a
w a r t o [ 0 .
F u n k c j l o n g j m p w y w o Bu j e s i z d w o m a a r g u m e n t a m i . P i e r w s z y m j e s t z m i e n n a ,
w k t ó r e j w c z e [n i e j z a p a m i t a n o s t a n p r o g r a m u p r z y p o m o c y f u n k c j i s e t j m p .
D r u g i a r g u m e n t j e s t l i c z b c a Bk o w i t . W y w o Ba n i e f u n k c j i l o n g j m p p o w o d u j e
6 4 W g Bb j z y k a C
o d t w o r z e n i e s t a n u p r o g r a m u j a k i z o s t a B z a p a m i t a n y w z m i e n n e j t y p u j m p _ b u f
p r z e k a z a n e j j a k o p i e r w s z y a r g u m e n t . W w y n i k u t a k i e g o w y w o Ba n i a f u n k c j i l o n -
g j m p p r o g r a m z n a j d u j e s i w p u n k c i e p o w r o t u z f u n k c j i s e t j m p ( b o w t a k i m
m o m e n c i e z o s t a B z a p a m i t a n y s t a n p r o g r a m u ) , p r z y c z y m w a r t o [ z w r a c a n a p r z e z
f u n k c j s e t j m p j e s t r ó w n a d r u g i e m u a r g u m e n t o w i f u n k c j i l o n g j m p ( l u b 1 j e |e l i
d r u g i a r g u m e n t b y B r ó w n y 0 ) . N a p o d s t a w i e w a r t o [c i f u n k c j i s e t j m p , p r o g r a m
j e s t w s t a n i e o d r ó |n i c z y z o s t a Ba o n a n o r m a l n i e w y w o Ba n a w w y n i k u z i n t e r p r e t o -
w a n i a k o l e j n e j i n s t r u k c j i , c z y t e | n a s t p i B s k o k p r z y p o m o c y f u n k c j i l o n g j m p .
D z i a Ba n i e f u n k c j i s e t j m p i l o n g j m p j e s t c z a s a m i t r u d n e d o z r o z u m i e n i a . P o n i |-
s z y p r z y k Ba d p o w i n i e n w y j a [n i n i e j s n o [c i .
i f ( s e t j m p ( b u f ) )
{
/ * c i g i n s t r u k c j i * /
}
/ * . . . * /
l o n g j m p ( b u f , 3 ) ;
P o w y w o Ba n i u f u n k c j i s e t j m p w a r u n e k n i e b d z i e s p e Bn i o n y ( s e t j m p z w r ó c i
w a r t o [ 0 ) i c i g i n s t r u k c j i n i e z o s t a n i e w y k o n a n y . W e f e k c i e w y w o Ba n i a f u n k c j i
l o n g j m p w i n n e j c z [c i p r o g r a m u , s t e r o w a n i e z o s t a n i e p r z e k a z a n e d o m i e j s c a
p o w r o t u z f u n k c j i s e t j m p , a l e t y m r a z e m z o s t a n i e z w r ó c o n a w a r t o [ r ó w n a 3 ,
a w i c w a r u n e k b d z i e s p e Bn i o n y i c i g i n s t r u k c j i z o s t a n i e w y k o n a n y .
P o n i e w a | p o " p o w r o c i e " f u n k c j a s e t j m p z w r a c a w a r t o [ p r z e k a z a n j a k o a r g u -
m e n t f u n k c j i l o n g j m p , n i c n i e s t o i n a p r z e s z k o d z i e , |e b y p r z y p o m o c y r ó |n y c h
f u n k c j i l o n g j m p p r z e k a z y w a r ó |n e w a r t o [c i i n a i c h p o s t a w i e i d e n t y f i k o w a
m i e j s c e , z k t ó r e g o n a s t p i B d a l e k i s k o k , n a p r z y k Ba d p r z y p o m o c y i n s t r u k c j i s w i -
t c h
s w i t c h ( s e t j m p ( b u f ) )
{
c a s e 1 : / * z p u n k t u 1 * / b r e a k ;
c a s e 2 : / * z p u n k t u 2 * / b r e a k ;
c a s e 3 : / * z p u n k t u 3 * / b r e a k ;
}
3 . P r z e Bc z a n i e z a d a D
Z a s t a n ó w m y s i n a p o c z t e k , w j a k i s p o s ó b d o k o n a p r z e Bc z e n i a p r o c e s o r a p o m i d z y
d w i e m a f u n k c j a m i . J a k w c z e [n i e j n a p i s a Be m , u |y j e m y p a r y f u n k c j i s e t j m p i l o n g j m p
d o w y k o n a n i a d a l e k i c h s k o k ó w p o m i d z y p r o c e s a m i ( f u n k c j a m i ) . D l a k a |d e g o p r o c e s u
b d z i e m y p o t r z e b o w a j e d n e j z m i e n n e j t y p u j m p _ b u f s Bu |c e j d o z a p a m i t a n i a s t a n u
p r o g r a m u w m o m e n c i e p r z e k a z a n i a s t e r o w a n i a d o d r u g i e g o p r o c e s u . O b i e z m i e n n e m u -
s z b y g l o b a l n e , a b y o b i e f u n k c j e m o g By s i d o n i c h o d w o Ba .
j m p _ b u f b u f 1 , b u f 2 ;
W c e l u w y k o n a n i a s k o k u d o f u n k c j i f 1 b d z i e m y u |y w a w y w o Ba n i a
I V P r o g r a m o w a n i e w s p ó Bb i e |n e 6 5
l o n g j m p ( b u f 1 , 1 ) ;
A n a l o g i c z n i e , |e b y s k o c z y d o f u n k c j i f 2
l o n g j m p ( b u f 2 , 1 ) ;
P r z e d w y k o n a n i e m s k o k u d o d r u g i e g o p r o c e s u , k a |d a f u n k c j a m u s i w y w o Ba
f u n k c j s e t j m p ( b u f ) . Z a p a m i t a n e p r z e z t f u n k c j i n f o r m a c j e o s t a n i e p r o g r a m u
b d m o g By b y w p r z y s z Bo [c i w y k o r z y s t a n e d o p o w r o t u d o m i e j s c a , w k t ó r y m
d z i a Ba n i e f u n k c j i z o s t a Bo z a w i e s z o n e . T a k w i c s e k w e n c j e p r z e Bc z a j c e z a d a n i a
b d w y g l d a By m n i e j w i c e j t a k :
i f ( s e t j m p ( b u f 1 ) = = 0 ) l o n g j m p ( b u f 2 , 1 ) ; / * w f u n k c j i f 1 * /
i f ( s e t j m p ( b u f 2 ) = = 0 ) l o n g j m p ( b u f 1 , 1 ) ; / * w f u n k c j i f 2 * /
F u n k c j a l o n g j m p z o s t a n i e w y w o Ba n a t y l k o w t e d y , g d y s e t j m p z w r ó c i w a r t o [ z e -
r o . N a s t p i t o w i c p o w y w o Ba n i u s e t j m p w c e l u z a p a m i t a n i a k o n t e k s t u p r o g r a m u ,
a n i e n a s t p i p o p o w r o c i e w t o m i e j s c e p r z y p o m o c y d a l e k i e g o s k o k u .
S p r ó b u j m y t e r a z u o g ó l n i t o r o z w i z a n i e n a n i e z n a n z g ó r y i l o [ p r o c e s ó w .
T r z e b a z d e f i n i o w a j a k [ s t r u k t u r d a n y c h , k t ó r a z a p e w n i a Ba b y i s t n i e n i e j e d n e g o
b u f o r a t y p u j m p _ b u f d l a k a |d e j f u n k c j i , a t a k |e u m o |l i w i a Ba b y o k r e [l e n i e j a k a j e s t
n a s t p n a f u n k c j a w " Ba Dc u s z k u " .
s t r u c t e l {
j m p _ b u f b u f ;
s t r u c t e l * n e x t ;
} ;
K a |d f u n k c j a b d z i e p o s i a d a Ba w Ba s n y e l e m e n t t y p u s t r u c t e l . W p o l u b u f t e g o
e l e m e n t u b d z i e z a p a m i t y w a n y k o n t e k s t t e j f u n k c j i w c h w i l i p r z e Bc z a n i a s t e r o -
w a n i a d o k o l e j n e g o z a d a n i a . P o l e n e x t s t r u k t u r y b d z i e w s k a z y w a Bo e l e m e n t t y p u
s t r u c t e l s k o j a r z o n y z f u n k c j , d o k t ó r e j m a b y p r z e k a z a n e s t e r o w a n i e . W t e n s p o -
s ó b p o w s t a n i e z a p t l o n a l i s t a o w z Ba c h t y p u s t r u c t e l . L i s t a j e s t j e d n o k i e r u n k o w a ,
g d y | k a |d y j e j e l e m e n t z a w i e r a t y l k o p o l e w s k a z u j c e n a s t p n y e l e m e n t . D o p e Bn e j
m a n i p u l a c j i l i s t j e d n o k i e r u n k o w ( w t y m d o u s u w a n i a e l e m e n t ó w z l i s t y ) p o -
t r z e b n e s c o n a j m n i e j d w i e z m i e n n e , w s k a z u j c e n a d w a k o l e j n e w z By l i s t y :
s t r u c t e l * c u r , * l a s t ;
Z m i e n n a c u r b d z i e z a w s z e w s k a z y w a n a w z e B o d p o w i a d a j c y a k t y w n e j f u n k c j i ,
z a [ z m i e n n a l a s t - n a w z e B o d p o w i a d a j c y p o p r z e d n i e j f u n k c j i . S e k w e n c j a p r z e B-
c z a n i a z a d a D z a p i s a n a p r z y u |y c i u t y c h z m i e n n y c h b d z i e w y g l d a Ba n a s t p u j c o :
i f ( s e t j m p ( c u r - > b u f ) = = 0 )
l o n g j m p ( ( l a s t = c u r , c u r = ( c u r - > n e x t ) ) - > b u f , 1 ) ;
A r g u m e n t e m f u n k c j i l o n g j m p j e s t d o [ s k o m p l i k o w a n e w y r a |e n i e :
( l a s t = c u r , c u r = ( c u r - > n e x t ) ) - > b u f
A n a l i z a t e g o w y r a |e n i a r o z p o c z n i e s i o d p r z y p i s a n i a z m i e n n e j l a s t w a r t o [c i
z m i e n n e j c u r . N a s t p n i e z m i e n n e j c u r j e s t p r z y p i s y w a n y w s k a zn i k d o n a s t p n e g o
6 6 W g Bb j z y k a C
w z Ba l i s t y . P o l e b u f t e g o w z Ba z o s t a j e a r g u m e n t e m f u n k c j i l o n g j m p ( z o s t a n i e
w y k o n a n y s k o k d o n a s t p n e j f u n k c j i ) .
P o l a b u f w l i [c i e m u s z b y z a i n i c j o w a n e p r z e d p i e r w s z y m w y w o Ba n i e m s e k w e n -
c j i p r z e Bc z a j c e j z a d a n i a . {e b y t o o s i g n , u m i e [c i m y n a p o c z t k u k a |d e j f u n k -
c j i n a s t p u j c y w a r u n e k :
i f ( s e t j m p ( c u r - > b u f ) = = 0 ) r e t u r n ;
J e |e l i f u n k c j a z o s t a n i e w y w o Ba n a , t o j e j k o n t e k s t z o s t a n i e z a p a m i t a n y w p o l u
c u r - > b u f i n a s t p i o d r a z u p o w r ó t d o f u n k c j i w y w o Bu j c e j .
P o z o s t a j e j e s z c z e z a s t a n o w i s i , c o z r o b i p o z a k o Dc z e n i u d z i a Ba n i a p r o c e s u .
T r z e b a g o o c z y w i [c i e u s u n z l i s t y , |e b y n i e b y B w i c e j w y k o n y w a n y . D o k o -
n u j e s i t e g o i n s t r u k c j
c u r = l a s t - > n e x t = c u r - > n e x t ;
W t y m m i e j s c u p r z y d a j e s i z a d e k l a r o w a n a w c z e [n i e j n a w y r o s t z m i e n n a l a s t . N a -
s t p n i e t r z e b a p r z e k a z a s t e r o w a n i e d o k o l e j n e g o p r o c e s u :
l o n g j m p ( c u r - > b u f , 1 ) ;
4 . Z a p i s p r a k t y c z n y
P r z e d s t a w i o n e p o w y |e j k o n s t r u k c j e r o b i d o b r y u |y t e k z f u n k c j i s e t j m p
i l o n g j m p u m o |l i w i a j c p r z e Bc z a n i e f u n k c j i - z a d a D, a l e w |a d n y m w y p a d k u n i e
n a d a j s i d o p r a k t y c z n e g o z a s t o s o w a n i a w p r o g r a m o w a n i u .
S t o s u j c d e f i n i c j e p r e p r o c e s o r a m o |n a z a p i s a t e s e k w e n c j e w s p o s ó b d u |o
c z y t e l n i e j s z y . Z a Bó |m y , |e z a p i s t e n m u s i s p e Bn i a n a s t p u j c e w a r u n k i :
K z a m i a n a n a p i s a n e j i u r u c h o m i o n e j w c z e [n i e j f u n k c j i n a p o s t a , w k t ó r e j
m o g Ba b y o n a b y w y k o n y w a n a w s p ó Bb i e |n i e , m u s i b y p r o s t a , p r a w i e
a u t o m a t y c z n a ,
K f u n k c j a p r z y s t o s o w a n a d o w y k o n y w a n i a w s p ó Bb i e |n e g o p o w i n n a d a l e j
m ó c b y w y w o By w a n a w n o r m a l n y s p o s ó b ,
K j e |e l i f u n k c j a j e s t o s t a t n i m p r o c e s e m ( w s z y s t k i e i n n e z a k o Dc z y By j u | d z i a Ba -
n i e ) t o n i e p o w i n n a b y w y k o n y w a n a s e k w e n c j a p r z e Bc z a n i a z a d a D.
P i e r w s z y m k r o k i e m b d z i e z a s t p i e n i e o m ó w i o n y c h w p o p r z e d n i m p o d r o z d z i a l e
s e k w e n c j i o d p o w i e d n i m i d e f i n i c j a m i p r e p r o c e s o r a :
# d e f i n e B E G I N i f ( s e t j m p ( c u r - > b u f ) = = 0 ) r e t u r n ;
# d e f i n e E N D c u r = l a s t - > n e x t = c u r - > n e x t ; \
l o n g j m p ( c u r - > b u f , 1 ) ;
# d e f i n e _ i f ( s e t j m p ( c u r - > b u f ) = = 0 ) \
l o n g j m p ( ( l a s t = c u r , c u r = ( c u r - > n e x t ) ) - > b u f , 1 ) ;
I V P r o g r a m o w a n i e w s p ó Bb i e |n e 6 7
M a k r o d e f i n i c j e B E G I N o r a z E N D b d u m i e s z c z a n e o d p o w i e d n i o n a p o c z t k u
i n a k o Dc u f u n k c j i . O s t a t n i e m a k r o j e s t w Ba [c i w s e k w e n c j p r z e Bc z a j c z a d a n i a .
I d e a Be m b y Ba b y s y t u a c j a g d y b y t o m a k r o w o g ó l e n i e b y Bo w i d o c z n e , d l a t e g o t e |
w y b r a Be m d l a n i e g o n a z w j a k n a j m n i e j r z u c a j c s i w o c z y : _ ( p o d k r e [l e n i e ) .
J a k j u | w c z e [n i e j u s t a l i l i [m y , w s z y s t k i e m a k r o d e f i n i c j e m a j b y " p r z e zr o c z y -
s t e " g d y f u n k c j a z o s t a n i e w y w o Ba n a w n o r m a l n y s p o s ó b . D o r o z r ó |n i a n i a c z y
f u n k c j a j e s t w y k o n y w a n a w s p ó Bb i e |n i e c z y n i e , u |y j e m y l o k a l n e j z m i e n n e j
i s _ a _ p r o c e s s . Z m i e n n a t a b d z i e m i a Ba w a r t o [ 1 t y l k o w t e d y , g d y f u n k c j a z o s t a n i e
w y w o Ba n a p r z e z f u n k c j i n i c j u j c p r o c e s y .
D e f i n i c j e r o z b u d o w a n e o s p r a w d z a n i e , c z y f u n k c j a j e s t w y k o n y w a n a w s p ó Bb i e |-
n i e w y g l d a j n a s t p u j c o :
# d e f i n e B E G I N {
\
s t a t i c c h a r i s _ a _ p r o c e s s ;
\
i f ( ( i s _ a _ p r o c e s s = b e _ a _ p r o c e s s ) ! = 0 )
\
i f ( s e t j m p ( c u r - > b u f ) = = 0 ) r e t u r n ;
# d e f i n e E N D i f ( i s _ a _ p r o c e s s ! = 0 ) \
{ \
c u r = l a s t - > n e x t = c u r - > n e x t ; \
l o n g j m p ( c u r - > b u f , 1 ) ; \
} \
} / * z a m y k a n a w i a s o t w a r t y w B E G I N * /
# d e f i n e _ i f ( i s _ a _ p r o c e s s ! = 0 ) \
i f ( s e t j m p ( c u r - > b u f ) = = 0 ) \
l o n g j m p ( ( l a s t = c u r , c u r = ( c u r - > n e x t ) ) - > b u f , 1 ) ;
Z m i e n n a b e _ a _ p r o c e s s j e s t z m i e n n g l o b a l n . J e j w a r t o [ w y n o s i c a By c z a s z e r o
i j e s t u s t a w i a n a n a j e d e n p r z e z f u n k c j i n i c j u j c p r o c e s y n a c z a s i n i c j u j c e g o
w y w o Ba n i a p r o c e s u . F u n k c j a i n i c j u j c a p r z y d z i e l a p a m i n a s t r u k t u r s t r u c t e l d l a
p r o c e s u i u m i e s z c z a j w l i [c i e .
v o i d p r o c e s ( F U N C T I O N f )
{
s t r u c t e l * t m p ;
_ n u m b e r + + ;
t m p = m a l l o c ( s i z e o f ( s t r u c t e l ) ) ;
i f ( c u r )
{ t m p - > n e x t = c u r - > n e x t ; c u r - > n e x t = t m p ; }
e l s e
{ c u r = t m p ; c u r - > n e x t = t m p ; }
l a s t = c u r ;
c u r = t m p ;
b e _ a _ p r o c e s s = 1 ;
( * f ) ( ) ;
b e _ a _ p r o c e s s = 0 ;
}
F U N C T I O N j e s t t y p e m w s k a z a n i e d o f u n k c j i t y p u v o i d :
t y p e d e f v o i d ( * F U N C T I O N ) ( v o i d ) ;
6 8 W g Bb j z y k a C
W f u n k c j i p r o c e s w y s t p u j e g l o b a l n a z m i e n n a _ n u m b e r . J a k w s k a z u j e n a z w a , j e j
w a r t o [ b d z i e o k r e [l a Ba l i c z b " |y w y c h " p r o c e s ó w . P r o c e s b d z i e j e j u |y w a B d o
s p r a w d z e n i a c z y n i e j e s t j u | p r z y p a d k i e m o s t a t n i m |y w y m p r o c e s e m .
P o z a i n i c j o w a n i u w s z y s t k i c h p r o c e s ó w m o |n a r o z p o c z i c h w s p ó Bb i e |n e w y -
k o n y w a n i e . W t y m c e l u z d e f i n i u j e m y m a k r o R U N :
# d e f i n e R U N i f ( s e t j m p ( _ t h e _ e n d ) = = 0 ) \
l o n g j m p ( ( c u r = c u r - > n e x t ) - > b u f , 1 ) ;
G l o b a l n a z m i e n n a _ t h e _ e n d s Bu |y d o z a p a m i t a n i a p u n k t u , z k t ó r e g o z o s t a Bo w y -
w o Ba n e w s p ó Bb i e |n e w y k o n y w a n i e p r o c e s ó w , i d o k t ó r e g o n a l e |y w r ó c i g d y
w s z y s t k i e p r o c e s y z a k o Dc z d z i a Ba n i e .
W y j a [n i e n i a w y m a g a c h y b a j e s z c z e w y r a |e n i e w f u n k c j i l o n g j m p :
( c u r = c u r - > n e x t ) - > b u f
Z a p e w n i a o n o r o z p o c z c i e p s e u d o - w s p ó Bb i e |n e g o w y k o n y w a n i a f u n k c j i o d t e j ,
k t ó r a z o s t a Ba j a k o p i e r w s z a z a d e k l a r o w a n a z a p o m o c f u n k c j i p r o c e s .
P o w p r o w a d z e n i u d w ó c h d o d a t k o w y c h z m i e n n y c h g l o b a l n y c h , _ n u m b e r
i _ t h e _ e n d , w c z e [n i e j s z e d e f i n i c j e b d w y g l d a By n a s t p u j c o :
# d e f i n e B E G I N { \
s t a t i c c h a r i s _ a _ p r o c e s s ;
\
i f ( ( i s _ a _ p r o c e s s = b e _ a _ p r o c e s s ) ! = 0 )
\
i f ( s e t j m p ( c u r - > b u f ) = = 0 ) r e t u r n ;
# d e f i n e E N D i f ( i s _ a _ p r o c e s s ! = 0 ) \
i f ( - - _ n u m b e r ! = 0 ) \
{ \
c u r = l a s t - > n e x t = c u r - > n e x t ; \
l o n g j m p ( c u r - > b u f , 1 ) ; \
} \
e l s e \
l o n g j m p ( _ t h e _ e n d , 1 ) ; \
} / * z a m y k a n a w i a s o t w a r t y w B E G I N * /
# d e f i n e _ i f ( i s _ a _ p r o c e s s ! = 0 &