Thread library overview
This is only a quick overview of the EiffelThread Library. The class reference for this library should give its complete interface.
Creating and launching threads: the class THREAD (deferred)
The class of the thread object you want to create should inherit the
Your thread is represented by a class which inherits from
class
MY_THREAD
inherit
THREAD
...
feature
execute
-- define the deferred feature from THREAD.
do
...
end
...
end -- class MY_THREAD
Creating a thread is like creating an Eiffel object:
my_thread: MY_THREAD
-- MY_THREAD inherits from THREAD and defines
-- the deferred procedure `execute'
...
create my_thread
my_thread.launch
On the Eiffel side, the procedure
On the C side, a C thread will be created and launched.
Caution: You may call
The class MUTEX
The implementation of the class
- Declaration of the mutex:
my_mutex: MUTEX
- Creation of mutex:
create my_mutex.make
- Locking the mutex:
my_mutex.lock
- Unlocking the mutex:
my_mutex.unlock
-
try_lock : if it is not locked yet, lock the mutex and return True, otherwise it returns False.
my_mutex.try_lock
- Is my mutex initialized?
my_mutex.is_set
Caution: Be sure that a mutex is unlocked when it is disposed.
The class SEMAPHORE
Like
- Declaration of the semaphore :
my_sem: SEMAPHORE
Creation of semaphore: initialize semaphore with nb_tokens, it requires nb_tokens > = 0 create my_sem.make (nb_tokens)
- Wait for a token:
my_sem.wait
- Give back a token:
my_sem.post
-
try_wait , similar to try_lock fromMUTEX , if a token is available, take it and returnTrue
, otherwise returnFalse
.
my_sem.try_wait
Caution: Be sure that a semaphore does not wait for a token when it is disposed
The class CONDITION_VARIABLE
This class allows to use condition variables in Eiffel. An instance of class
- Declaration of the condition variable
my_cond: CONDITION_VARIABLE
- Creation:
create my_cond.make
- Wait for a signal (send by
signal ). You need to use a mutex.
my_mutex: MUTEX
...
create my_mutex.make
my_mutex
must be locked by the calling thread so as my_mutex
and waits for the condition variable my_mutex
to receive a signal. As soon as it received a signal, my_cond
locks my_mutex
my_mutex.lock
-- You must lock `my_mutex' before calling wait.
my_cond.wait (my_mutex)
-- Here the critical code to execute when `my_cond' received a signal.
my_mutex.unlock
-- Unlock the mutex at the end of the critical section.
- Send a signal one thread blocked on the condition variable `my_cond'.
my_cond.signal
- Send a signal to all the threads blocked on the condition variable `my_cond'.
my_cond.broadcast
Caution: Be sure that a condition variable is unblocked when it is disposed.
Miscellaneous classes
class
Controlling execution: THREAD_CONTROL
-
yield : the calling thread yields its execution in favor of an other thread of same priority. -
join_all : the calling thread waits for all other threads to finished (all its children). - A parent thread can wait for the termination of a child process through the feature
join of classTHREAD_CONTROL (inherited byTHREAD ):
thr: MY_THREAD
...
thr.launch
...
thr.join