Basic Multithreading using POSIX threads Tushar B. Kute, http://tusharkute.com
Threads • A Thread is an independent stream of instructions that can be schedule to run as such by the OS. • Think of a thread as a “procedure” that runs independently from its main program. • Multi-threaded programs are where several procedures are able to be scheduled to run simultaneously and/or independently by the OS. • A Thread exists within a process and uses the process resources.
Threads • Threads only duplicate the essential resources it needs to be independently schedulable. • A thread will die if the parent process dies. • A thread is “lightweight” because most of the overhead has already been accomplished through the creation of the process.
The POSIX threads • POSIX – Portable Operating System Interface for Unix. • For UNIX systems, implementations of threads that adhere to the IEEE POSIX 1003.1c standard are Pthreads. • Pthreads are C language programming types defined in the pthread.h header/include file.
The Pthreads • The primary motivation behind Pthreads is improving program performance. • Can be created with much less OS overhead. • Needs fewer system resources to run. • View comparison of forking processes to using a pthreads_create subroutine. Timings reflect 50,000 processes/thread creations.
Find multithreaded programs in Linux • ps -aux Multithreaded application Single threaded application
#include<stdio.h> int main() { while(1) { printf("Hello...n"); } return 0; } Check the entry in process list... Single threaded program
Pthread library • Pthread Library (60+ functions) – Thread management: create, exit, detach, join, . . . – Thread cancellation – Mutex locks: init, destroy, lock, unlock, . . . – Condition variables: init, destroy, wait, timed wait, . . . . . . • Programs must include the file pthread.h • Programs must be linked with the pthread library (-lpthread)
Pthread: naming convensions • Types: pthread[_object]_t • Functions: pthread[_object]_action • Constants/Macros: PTHREAD_PURPOSE • Examples: – pthread_t: the type of a thread – pthread_create(): creates a thread – pthread_mutex_t: the type of a mutex lock – pthread_mutex_lock(): lock a mutex – PTHREAD_CREATE_DETACHED
• Creates a new thread • int pthread_create ( pthread_t *thread,  pthread_attr_t *attr, void * (*start_routine) (void  *), void *arg); • Returns 0 to indicate success, otherwise returns error code... –thread: output argument for the id of the new thread –attr: input argument that specifies the attributes of the thread to be created (NULL = default attributes) –start_routine: function to use as the start of the new thread must have prototype: void * foo(void*) –arg: argument to pass to the new thread routine. If the thread routine requires multiple arguments, they must be passed bundled up in an array or a structure pthread_create
• Terminates the calling thread • void pthread_exit(void *retval); • The return value is made available to another thread calling a pthread_join() • The return value of the function serves as the argument to the (implicitly called) pthread_exit(). • pthread_exit
• Causes the calling thread to wait for another thread to terminate • int pthread_join( pthread_t thread, void **value_ptr); – thread: input parameter, id of the thread to wait on – value_ptr: output parameter, value given to pthread_exit() by the terminating thread (which happens to always be a void *) • Returns 0 to indicate success, error code otherwise • Multiple simultaneous calls for the same thread are not allowed pthread_join
int first() { int i; for(i=0; ;i++) { printf("nFirst: %d",i); sleep(1); } } Single threaded program int main() { int i; first( ); for(i=0;;i++) { printf("nMain: %d",i); sleep(1); } return 0; }
#include<unistd.h> #include<stdio.h> #include<pthread.h> int first() {  int i;  for(i=0;;i++)  {      printf("nFirst: %d",i);      sleep(1);  } } Multithreaded program int main() {     pthread_t th;     int i;     pthread_create(&th, 0,(void                   *)&first,NULL);     for(i=0;;i++)     {         printf("nMain: %d",i);         sleep(1);     }     pthread_join(th, NULL);     return 0; }
Output Process list
tushar@tusharkute.com Thank you This presentation is created using LibreOffice Impress 4.2.7.2, can be used freely as per GNU General Public License Blogs http://digitallocha.blogspot.in http://kyamputar.blogspot.in Web Resources http://tusharkute.com

Basic Multithreading using Posix Threads

  • 1.
    Basic Multithreading usingPOSIX threads Tushar B. Kute, http://tusharkute.com
  • 2.
    Threads • A Threadis an independent stream of instructions that can be schedule to run as such by the OS. • Think of a thread as a “procedure” that runs independently from its main program. • Multi-threaded programs are where several procedures are able to be scheduled to run simultaneously and/or independently by the OS. • A Thread exists within a process and uses the process resources.
  • 3.
    Threads • Threads onlyduplicate the essential resources it needs to be independently schedulable. • A thread will die if the parent process dies. • A thread is “lightweight” because most of the overhead has already been accomplished through the creation of the process.
  • 4.
    The POSIX threads •POSIX – Portable Operating System Interface for Unix. • For UNIX systems, implementations of threads that adhere to the IEEE POSIX 1003.1c standard are Pthreads. • Pthreads are C language programming types defined in the pthread.h header/include file.
  • 5.
    The Pthreads • Theprimary motivation behind Pthreads is improving program performance. • Can be created with much less OS overhead. • Needs fewer system resources to run. • View comparison of forking processes to using a pthreads_create subroutine. Timings reflect 50,000 processes/thread creations.
  • 6.
    Find multithreaded programsin Linux • ps -aux Multithreaded application Single threaded application
  • 7.
  • 8.
    Pthread library • PthreadLibrary (60+ functions) – Thread management: create, exit, detach, join, . . . – Thread cancellation – Mutex locks: init, destroy, lock, unlock, . . . – Condition variables: init, destroy, wait, timed wait, . . . . . . • Programs must include the file pthread.h • Programs must be linked with the pthread library (-lpthread)
  • 9.
    Pthread: naming convensions •Types: pthread[_object]_t • Functions: pthread[_object]_action • Constants/Macros: PTHREAD_PURPOSE • Examples: – pthread_t: the type of a thread – pthread_create(): creates a thread – pthread_mutex_t: the type of a mutex lock – pthread_mutex_lock(): lock a mutex – PTHREAD_CREATE_DETACHED
  • 10.
    • Creates anew thread • int pthread_create ( pthread_t *thread,  pthread_attr_t *attr, void * (*start_routine) (void  *), void *arg); • Returns 0 to indicate success, otherwise returns error code... –thread: output argument for the id of the new thread –attr: input argument that specifies the attributes of the thread to be created (NULL = default attributes) –start_routine: function to use as the start of the new thread must have prototype: void * foo(void*) –arg: argument to pass to the new thread routine. If the thread routine requires multiple arguments, they must be passed bundled up in an array or a structure pthread_create
  • 11.
    • Terminates thecalling thread • void pthread_exit(void *retval); • The return value is made available to another thread calling a pthread_join() • The return value of the function serves as the argument to the (implicitly called) pthread_exit(). • pthread_exit
  • 12.
    • Causes thecalling thread to wait for another thread to terminate • int pthread_join( pthread_t thread, void **value_ptr); – thread: input parameter, id of the thread to wait on – value_ptr: output parameter, value given to pthread_exit() by the terminating thread (which happens to always be a void *) • Returns 0 to indicate success, error code otherwise • Multiple simultaneous calls for the same thread are not allowed pthread_join
  • 13.
    int first() { int i; for(i=0;;i++) { printf("nFirst: %d",i); sleep(1); } } Single threaded program int main() { int i; first( ); for(i=0;;i++) { printf("nMain: %d",i); sleep(1); } return 0; }
  • 14.
  • 15.
  • 16.
    tushar@tusharkute.com Thank you This presentationis created using LibreOffice Impress 4.2.7.2, can be used freely as per GNU General Public License Blogs http://digitallocha.blogspot.in http://kyamputar.blogspot.in Web Resources http://tusharkute.com