Download presentation
Presentation is loading. Please wait.
1
Pthread II
2
Outline Join Mutex Variables Condition Variables
3
Join Mutex Variables Condition Variables
4
"Joining" is one way to accomplish synchronization between threads.
5
1.Declare a pthread attribute variable of the pthread_attr_t data type 2.Initialize the attribute variable with pthread_attr_init() 3.Set the attribute detached status with pthread_attr_setdetachstate() 4.When done, free library resources used by the attribute with pthread_attr_destroy()
6
int pthread_join( pthread_t tid, void **status ); If successful, the pthread_join() function shall return zero; otherwise, an error number shall be returned to indicate the error (the number>0)
7
Join Mutex Variables Condition Variables
8
Typical Sequence Create and initialize a mutex variable Several threads attempt to lock the mutex Only one succeeds and that thread owns the mutex The owner thread performs some set of actions The owner unlocks the mutex Another thread acquires the mutex and repeats the process Finally the mutex is destroyed
9
Creating and Destroying Mutexes pthread_mutex_initpthread_mutex_init (mutex,attr) pthread_mutex_destroypthread_mutex_destroy (mutex) pthread_mutexattr_initpthread_mutexattr_init (attr) pthread_mutexattr_destroypthread_mutexattr_destroy (attr)
10
Initialize Mutex variables must be declared with type pthread_mutex_t, and must be initialized before they can be used. 1. pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; 2. pthread_mutex_init() routine. This method permits setting mutex object attributes, attr The mutex is initially unlocked
11
Locking and Unlocking Mutexes pthread_mutex_lockpthread_mutex_lock (mutex) pthread_mutex_trylockpthread_mutex_trylock (mutex) pthread_mutex_unlockpthread_mutex_unlock (mutex)
12
pthread_mutex_unlock() will unlock a mutex if called by the owning thread An error will be returned if: 1.If the mutex was already unlocked 2.If the mutex is owned by another thread
13
The programmer have to to insure that the necessary threads all make the the mutex lock and unlock calls correctly E.g. lock ….. lock Deadlock
14
Join Mutex Variables Condition Variables
15
pthread_cond_initpthread_cond_init (condition,attr) pthread_cond_destroypthread_cond_destroy (condition) pthread_condattr_initpthread_condattr_init (attr) pthread_condattr_destroypthread_condattr_destroy (attr)
16
Condition variable initialization 1.pthread_cond_t myconvar = PTHREAD_COND_INITIALIZER; 2.pthread_cond_init() The ID of the created condition variable is returned to the calling thread through the condition parameter
17
Waiting and Signaling on Condition Variables pthread_cond_waitpthread_cond_wait (condition,mutex) pthread_cond_signalpthread_cond_signal (condition) pthread_cond_broadcastpthread_cond_broadcast (condition)
18
more than one thread is in a blocking wait state =>pthread_cond_broadcast() It is a logical error to call pthread_cond_signal() before calling pthread_cond_wait()
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.