"fr*********@googlemail.com" <fr*********@googlemail.comwrites:
can any one give a simple example for implementing mutex.
I have 3 threads (taking different input files )enter into the same
function at different times...
The 3 threads need to exit/leave the function till all the input files
reached till end which are taken as input to the threds.
So you want the three threads in the same function at the same time.
So you want absolutely no mutual exclusion, but exactly the opposite,
you want mutual INCLUSION!
You should try to express what you want more clearly. For example,
you could start with something more grammatically correct. I have
really a hard time parsing this sentence:
"The 3 threads need to exit/leave the function till all the input
files reached till end which are taken as input to the threds."
Let's assume what you want is:
thread 1
|
|
v
----- enter function
|
|
v
(go on reading file 1)
| thread 2
| |
| |
| v
| ----- enter function
| |
| |
| v
| (go on reading file 2)
| |
| |
| |
| | thread 3
| | |
| | |
| | v
| | ----- enter function
| | |
| | |
| | v
| | (go on reading file 3)
v | |
----- reach eof v |
| ----- reach eof |
| | v
| | ----- reach eof
| | |
v v v
---------------------------------------------------- exit function
| | |
| | |
v v v
The synchronization at the exit function could be implemented with a
condition.
initialize:
- a counter = 0
- a mutex m
- a condition c
synchronized_exit(n)
mutext_lock(m)
increment counter
if (counter >= n) then
condition_broadcast(c)
counter=0
else
condition_wait(c,m)
endif
mutext_unlock(m)
All three threads shall call synchronized_exit(3) after reaching their EOF.
man pthread_cond_init pthread_cond_wait pthread_cond_broadcast
man pthread_mutex_init pthread_mutex_lock pthread_mutex_unlock
--
__Pascal Bourguignon__