200 likes | 212 Views
Professor: Shu-Ching Chen TA: Yimin Yang. Multithreading Tutorial. Sequentially execute. What is a Thread?. A n independent stream of instructions that can be scheduled to run A path of execution. Multi-Thread. Single-Thread. int a, b; int c; a = 1; b = a + 2; c = 3;.
E N D
Professor: Shu-Ching Chen TA: Yimin Yang MultithreadingTutorial
Sequentially execute What is a Thread? • An independent stream of instructions that can be scheduled to run • A path of execution Multi-Thread Single-Thread inta, b; intc; a = 1; b = a + 2; c = 3; inta, b; a = 1; b = a + 2; intc; c = 5; CPU CPU
Program v.s. Process v.s. Thread • Program • An execution file stored in the harddrive • Process • An execution file stored in the Memory • Thread • An execution path of part of the process Program Process Thread HDD Memory
Why is thread? • Parallel execution • Shared resources • Easier to create and destroy than processes (100X) • Easy porting to multiple CPUs
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 • 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 (3) • Several variables
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 (3) • pthread_join() Return 0 if OK, nonzero on error • Wait from other threads to terminate by calling it
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
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 – Condition Variables (1) • Condition variables are used • to allow threads to synchronize based upon the actual value of data without continually pollingto check whether the condition if met • in conjunction with a mutex lock
References • POSIX Threads Programming • https://computing.llnl.gov/tutorials/pthreads/ • Pthreads primer • http://pages.cs.wisc.edu/~travitch/pthreads_primer.html • POSIX thread (pthread) Tutorial • http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html