Operating Systems

Operating Systems - Pthread Tutorial Creating a POSIX...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
Pthread Tutorial Creating a POSIX thread. Pthreads are created using pthread_create() . #include <pthread.h> int pthread_create (pthread_t *thread_id, const pthread_attr_t *attributes, void *(*thread_function)(void *), void *arguments); This function creates a new thread. pthread_t is an opaque type which acts as a handle for the new thread. attributes is another opaque data type which allows you to fine tune various parameters, to use the defaults pass NULL. thread_function is the function the new thread is executing, the thread will terminate when this function terminates, or it is explicitly killed. arguments is a void * pointer which is passed as the only argument to the thread_function. Pthreads terminate when the function returns, or the thread can call pthread_exit() which terminates the calling thread explicitly. int pthread_exit (void *status); status is the return value of the thread. (note a thread_function returns a void *, so calling return(void *) is the equivalent of this function. One Thread can wait on the termination of another by using pthread_join() int pthread_join (pthread_t thread, void **status_ptr); The exit status is returned in status_ptr. A thread can get its own thread id, by calling pthread_self() pthread_t pthread_self (); Two thread id's can be compared using pthread_equal() int pthread (pthread_t t1, pthread_t t2); Returns zero if the threads are different threads, non-zero otherwise.
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
Mutexes When writing multithreaded programs it is frequently necessary to enforce mutually exclusive access to a shared data object. This is done with mutex objects. The idea is to associate a mutex with each shared data object and then require that every thread that wishes to use the shared data object first lock the mutex before doing so. Here are the particular. 1. Declare an object of type pthread_mutex_t . 2. Initialize the object by calling pthread_mutex_init() . 3. Call pthread_mutex_lock() to gain exclusive access to the shared data object. 4. Call pthread_mutex_unlock() to release the exclusive access and allow another thread to use the shared data object. 5. Get rid of the object by calling pthread_mutex_destroy() . Mutexes have two basic operations, lock and unlock. If a mutex is unlocked and a thread calls lock, the mutex locks and the thread continues. If however the mutex is locked, the thread blocks until the thread 'holding' the lock calls unlock. There are 5 basic functions dealing with mutexes. int pthread_mutex_init (pthread_mutex_t *mut, const pthread_mutexattr_t *attr); Note that you pass a pointer to the mutex, and that to use the default attributes just pass NULL for the second parameter. int pthread_mutex_lock (pthread_mutex_t *mut); Locks the mutex. int
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}

Page1 / 11

Operating Systems - Pthread Tutorial Creating a POSIX...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online