Multithreading Tutorial Professor ShuChing Chen TA Samira Pouyanfar

  • Slides: 20
Download presentation
Multithreading Tutorial Professor: Shu-Ching Chen TA: Samira Pouyanfar

Multithreading Tutorial Professor: Shu-Ching Chen TA: Samira Pouyanfar

What is a Thread? �An independent stream of instructions that can be scheduled to

What is a Thread? �An independent stream of instructions that can be scheduled to run �A path of execution Multi-Thread Single-Thread Sequentially execute CPU int a, b; int c; a = 1; b = a + 2; c = 3; int a, b; a = 1; b = a + 2; int c; c = 5; CPU

Program v. s. Process v. s. Thread �Program An execution file stored in the

Program v. s. Process v. s. Thread �Program An execution file stored in the hard drive �Process An execution file stored in the Memory �Thread An execution path of part of the process Program HDD Process Memory Thread

Why is thread? �Parallel execution �Shared resources �Easier to create and destroy than processes

Why is thread? �Parallel execution �Shared resources �Easier to create and destroy than processes (100 X) �Easy porting to multiple CPUs

The Pthread API �Standardized C language threads programming interface for UNIX systems �Four major

The Pthread API �Standardized C language threads programming interface for UNIX systems �Four major groups Thread management: Routines that work directly on threads - creating, detaching, joining, etc. Mutex: Routines that deal with synchronization. Mutex functions provide for creating, destroying, locking and unlocking mutexes. Condition variable: Routines that address communications between threads that share a mutex. Synchronization: Routines that manage read/write locks and barriers.

Creating threads (1) �pthread_create() Return 0 if OK, nonzero on error Four Arguments ▪

Creating threads (1) �pthread_create() Return 0 if OK, nonzero on error Four Arguments ▪ ▪ Thread : A thread identifier Attr : A pointer to a thread attribute object Start_routine : A pointer to the function the thread executes Arg : The argument to the function

Creating threads (2) �Single variable

Creating threads (2) �Single variable

Creating threads (3) �Several variables

Creating threads (3) �Several variables

Terminating Threads (1) �pthread_exit() Return 0 if OK, nonzero on error �Four ways of

Terminating Threads (1) �pthread_exit() Return 0 if OK, nonzero on error �Four ways of terminating a thread The thread returns from its starting routine The thread makes a call to the pthread_exit subroutine The thread is canceled by another thread The entire process is terminated If main() finishes first, without calling pthread_exit

Terminating Threads (2) �Example of pthread_exit()

Terminating Threads (2) �Example of pthread_exit()

Terminating Threads (3) �pthread_join() Return 0 if OK, nonzero on error �Wait from other

Terminating Threads (3) �pthread_join() Return 0 if OK, nonzero on error �Wait from other threads to terminate by calling it

Terminating Threads (4)

Terminating Threads (4)

Other Thread functions �pthread_self() It returns the unique, system assigned thread ID of the

Other Thread functions �pthread_self() It returns the unique, system assigned thread ID of the calling thread �pthread_detach() Return 0 if OK, nonzero on error It can be used to explicitly detach a thread

Synchronizations �Join �Mutexes �Condition variables

Synchronizations �Join �Mutexes �Condition variables

Synchronization - Mutexes (1) �Mutexes are used to prevent data inconsistencies due to operations

Synchronization - Mutexes (1) �Mutexes are used to prevent data inconsistencies due to operations by multiple threads upon the same memory area performed at the same time to prevent race conditions where an order of operation upon the memory is expected

Synchronization - Mutexes (2)

Synchronization - Mutexes (2)

Synchronization - Mutexes (3)

Synchronization - Mutexes (3)

Synchronization – Condition Variables (1) �Condition variables are used to allow threads to synchronize

Synchronization – Condition Variables (1) �Condition variables are used to allow threads to synchronize based upon the actual value of data without continually polling to check whether the condition if met in conjunction with a mutex lock

Synchronization – Condition Variables (2)

Synchronization – Condition Variables (2)

References �POSIX Threads Programming https: //computing. llnl. gov/tutorials/pthreads/ �Pthreads primer http: //pages. cs. wisc.

References �POSIX Threads Programming https: //computing. llnl. gov/tutorials/pthreads/ �Pthreads primer http: //pages. cs. wisc. edu/~travitch/pthreads_prim er. html �POSIX thread (pthread) Tutorial http: //www. yolinux. com/TUTORIALS/Linux. Tutori al. Posix. Threads. html