POSIX Threads (Pthreads) in Linux 1 / 12 Thread Creation

POSIX Threads (Pthreads) in Linux 1 / 12 Thread Creation

Recap Shared resources Code, global data Open files, current working directory Credentials Thread-specific resources Thread ID Registers, stack Priority errno (error codes) M. Mitra (ISI) POSIX threads (pthreads) in Linux 1 / 12 Thread creation Thread ID (≡ unsigned long int) #include <pthread.h> Attributes int pthread_create(pthread_t *thread, (default if NULL const pthread_attr_t *attr, ) void *(*start_routine) (void *), void *arg); . Arguments to start_routine Compiling: gcc -pthread ... OR gcc ... -lpthread M. Mitra (ISI) POSIX threads (pthreads) in Linux 2 / 12 Thread termination By calling pthread_exit(void *retval) By returning from start_routine() By cancelling (killing) using pthread_cancel() z When any thread calls exit(), or main thread returns from main() (all threads in process terminate) M. Mitra (ISI) POSIX threads (pthreads) in Linux 3 / 12 Thread termination void pthread_exit(void *retval); retval : return value NOTE: avoid dangling pointers M. Mitra (ISI) POSIX threads (pthreads) in Linux 4 / 12 Thread attributes Initialisation: pthread_attr_t attr; pthread_attr_init(&attr); Getting / setting thread attributes: int pthread_attr_setdetachstate(&attr, int detachstate); int pthread_attr_setguardsize(&attr, size_t guardsize); int pthread_attr_setinheritsched(&attr, int inheritsched); int pthread_attr_setschedparam(&attr, const struct sched_param *param); int pthread_attr_setschedpolicy(&attr, int policy); int pthread_attr_setscope(&attr, int contentionscope); int pthread_attr_setstackaddr(&attr, void *stackaddr); int pthread_attr_setstacksize(&attr, size_t stacksize); M. Mitra (ISI) POSIX threads (pthreads) in Linux 5 / 12 Thread attributes detached state: PTHREAD_CREATE_JOINABLE, PTHREAD_CREATE_DETACHED scheduling attributes: PTHREAD_INHERIT_SCHED, PTHREAD_EXPLICIT_SCHED scheduling policy: SCHED_FIFO, SCHED_RR, SCHED_OTHER scheduling parameters M. Mitra (ISI) POSIX threads (pthreads) in Linux 6 / 12 pthread_t pthread_self(void); int pthread_equal(pthread_t tid1, pthread_t tid2); Other useful functions int pthread_join(pthread_t tid, void **thread_return); tid : calling thread suspended until thread tid terminates thread_return : if not NULL, return value of tid is stored in location pointed to by thread_return analogous to wait() M. Mitra (ISI) POSIX threads (pthreads) in Linux 7 / 12 Other useful functions int pthread_join(pthread_t tid, void **thread_return); tid : calling thread suspended until thread tid terminates thread_return : if not NULL, return value of tid is stored in location pointed to by thread_return analogous to wait() pthread_t pthread_self(void); int pthread_equal(pthread_t tid1, pthread_t tid2); M. Mitra (ISI) POSIX threads (pthreads) in Linux 7 / 12 Misc. information Linux-specific; obtained from Internet sources, subject to confirmation. 1:1 correspondence between each pthread and a kernel thread many-to-many correspondence: Solaris, Windows 7 many-to-one correspondence: user-level threads Thread ID unique only in context of a single process fork() duplicates only calling thread exec() from any thread stops all threads in parent process M. Mitra (ISI) POSIX threads (pthreads) in Linux 8 / 12 Synchronisation int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); int pthread_mutex_lock(pthread_mutex_t *mutex); int pthread_mutex_trylock(pthread_mutex_t *mutex); int pthread_mutex_unlock(pthread_mutex_t *mutex); pthread_mutex_trylock if mutex is unlocked, locks mutex if mutex is locked, returns with error code EBUSY (does not block) M. Mitra (ISI) POSIX threads (pthreads) in Linux 9 / 12 Thread safe / reentrant functions Some functions use static or global variables to save state information across calls, e.g., strtok() ) non-thread safe / non re-entrant Thread safe versions: strtok_r() M. Mitra (ISI) POSIX threads (pthreads) in Linux 10 / 12 Exercise 1. Matrix multiplication: generate 2 random 1000x1000 matrices A and B and multiply them. Compare the times taken by single-threaded and multi-threaded programs if the matrices are stored in memory / file. M. Mitra (ISI) POSIX threads (pthreads) in Linux 11 / 12 Useful websites https://computing.llnl.gov/tutorials/pthreads/ http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html http://people.cs.pitt.edu/~melhem/courses/xx45p/pthread.pdf https://randu.org/tutorials/threads/ Simple examples: https://linuxprograms.wordpress.com/2007/12/29/ threads-programming-in-linux-examples/ M. Mitra (ISI) POSIX threads (pthreads) in Linux 12 / 12.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    13 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us