Presentation is loading. Please wait.

Presentation is loading. Please wait.

Pthreads & Concurrency. Acknowledgements  The material in this tutorial is based in part on: POSIX Threads Programming, by Blaise Barney.

Similar presentations


Presentation on theme: "Pthreads & Concurrency. Acknowledgements  The material in this tutorial is based in part on: POSIX Threads Programming, by Blaise Barney."— Presentation transcript:

1 Pthreads & Concurrency

2 Acknowledgements  The material in this tutorial is based in part on: POSIX Threads Programming, by Blaise Barney

3  History  Advantages  Content

4 History  Different versions of threads each hardware vendor created own version  IEEE POSIX 1003.1c Standard  C programming types and procedure calls

5 Advantages  Potential program performance gains Platform fork()pthread_create() realusersysrealusersys AMD 2.4 GHz Opteron 41.0760.089.010.660.190.43 IBM 1.9 GHz POWER5 p5-575 64.2430.7827.681.750.691.10 IBM 1.5 GHz POWER4 104.0548.6447.212.011.001.52 INTEL 2.4 GHz Xeon 54.951.5420.781.640.670.90

6 Advantages  More efficient inter-thread communication  Threaded applications Overlap CPU work and I/O Priority/Real-time scheduling Asynchronous event handling

7 The Pthreads API  Thread management Create, detach, join Set/query thread attributes  Mutex Mutual Exclusion  Condition variables Address communications between threads  Non-mutex synchronization Read/write locks Barriers

8 The Pthreads API  Naming conventions Routine PrefixFunctional Group pthread_Thread themselves and miscellaneous subroutines pthread_attr_Thread attributes objects pthread_mutex_Mutexes pthread_mutexattr_Mutex attributes objects pthread_cond_Condition variables pthread_condattr_Condition attributes objects pthread_key_Thread-specific data keys

9  Create & Terminate  Program: Hello World

10 Creation  Routine pthread_create( thread, attr, start_routine, arg)

11 Termination  Four ways for a Pthread to terminate Returns from start_routine Call pthread_exit routine Cancel by another thread through pthread_cancel routine exit call

12 Example: Hello World  Program Requirements Print “Hello World” through standard output Use two threads to finish the task, one should print “Hello”, the other should print “World” Terminate all related threads related after finishing the printing task

13 Example: Hello World #include ……

14 Example: Hello World void print_message_function( void *ptr ) { char *message; message = (char *) ptr; printf("%s ", message); }

15 Example: Hello World main() { pthread_t thread1, thread2; char *message1 = "Hello"; char *message2 = "World"; …… }

16 Example: Hello World main() { pthread_t thread1, thread2; char *message1 = "Hello"; char *message2 = "World"; …… }

17 Example: Hello World main() { pthread_t thread1, thread2; char *message1 = "Hello"; char *message2 = "World"; …… }

18 Example: Hello World main() { …… pthread_create(&thread1, pthread_attr_default, (void*)&print_message_function, (void*) message1); pthread_create(&thread2, pthread_attr_default, (void*)&print_message_function, (void*) message2); exit(0); }

19 Example: Hello World main() { …… pthread_create(&thread1, pthread_attr_default, (void*)&print_message_function, (void*) message1); pthread_create(&thread2, pthread_attr_default, (void*)&print_message_function, (void*) message2); exit(0); }

20 Example: Hello World main() { …… pthread_create(&thread1, pthread_attr_default, (void*)&print_message_function, (void*) message1); pthread_create(&thread2, pthread_attr_default, (void*)&print_message_function, (void*) message2); exit(0); }

21 Example: Hello World main() { …… pthread_create(&thread1, pthread_attr_default, (void*)&print_message_function, (void*) message1); pthread_create(&thread2, pthread_attr_default, (void*)&print_message_function, (void*) message2); exit(0); }

22 Example: Hello World main() { …… pthread_create(&thread1, pthread_attr_default, (void*)&print_message_function, (void*) message1); pthread_create(&thread2, pthread_attr_default, (void*)&print_message_function, (void*) message2); exit(0); }

23 Example: Hello World main() { …… pthread_create(&thread1, pthread_attr_default, (void*)&print_message_function, (void*) message1); pthread_create(&thread2, pthread_attr_default, (void*)&print_message_function, (void*) message2); exit(0); }

24 Example: Hello World main() { …… pthread_create(&thread1, pthread_attr_default, (void*)&print_message_function, (void*) message1); pthread_create(&thread2, pthread_attr_default, (void*)&print_message_function, (void*) message2); exit(0); }

25 Example: Hello World default threadThread 2Thread 1

26 Example: Hello World default threadThread 2Thread 1

27 Example: Hello World default threadThread 2Thread 1

28 Example: Hello World default threadThread 2Thread 1

29 Example: Hello World default threadThread 2Thread 1

30 Example: Hello World default threadThread 2Thread 1 Printf

31 Example: Hello World default threadThread 2Thread 1 PrintfExitPrintf

32 Example: Hello World Thread 1Thread 2 standard output Thread 1 default thread Thread 2 Return

33 Example: Hello World void print_message_function( void *ptr ) { char *message; message = (char *) ptr; printf("%s ", message); } main() { …… pthread_exit(); //exit(0); }

34 Example: Hello World void print_message_function( void *ptr ) { char *message; message = (char *) ptr; printf("%s ", message); pthread_exit(); } main() { …… pthread_exit(); //exit(0); }

35 Passing parameters to threads  The pthread_create() routine permits the programmer to pass one argument to the thread start routine.  For cases where multiple arguments must be passed, this limitation is overcome by creating a structure which contains all of the arguments, and then passing a pointer to that structure.  All arguments must be passed by reference and cast to (void *).

36 Joining and detaching threads  pthread_join (threadid,status) blocks the calling thread until the specified threadid thread terminates. target thread's termination return status placed in status if specified in the target thread's call to pthread_exit(). A joining thread can match one pthread_join() call. It is a logical error to attempt multiple joins on the same thread.  pthread_detach (threadid, status) to explicitly detach a thread  pthread_attr_setdetachstate (attr,detachstate)  pthread_attr_getdetachstate (attr, detachstate)

37  Create & Destroy  Lock & Unlock  Program: Bounded Buffer

38 Mutex  Mutual Exclusion  Act as a “lock” to prevent race conditions  Typical sequence of use create, initialize lock, unlock destroy  Losers in the competition for the mutex variable have to block

39 Creating & Destroying  Type: pthread_mutex_t  Initializing Statically ○ pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER Dynamically ○ pthread_mutex_init (mutex, attr) pthread_mutex_attr_t attr specifies protocol for priorities, priority ceiling, and process sharing  Destroying pthread_mutex_destroy – to delete a mutex object pthread_mutex_attr_destroy – to delete a mutex attr object

40 Lock & Unlock  Lock pthread_mutex_lock (mutex) ○ blocks calling thread if mutex already locked pthread_mutex_trylock(mutex) ○ returns with “busy” code if already locked  Unlock pthread_mutex_unlock (mutex) Error ○ mutex is released ○ mutex owned by others


Download ppt "Pthreads & Concurrency. Acknowledgements  The material in this tutorial is based in part on: POSIX Threads Programming, by Blaise Barney."

Similar presentations


Ads by Google