1 / 22

Tutorial 4

Tutorial 4. In this tutorial session we’ll see. Threads. Threads. Process. Processes contain information about program resources and program execution state, including: Process ID, process group ID, user ID, and group ID Program code (text) Registers Stack (for temporary data)

kkevin
Download Presentation

Tutorial 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Tutorial 4

  2. In this tutorial session we’ll see • Threads.

  3. Threads

  4. Process • Processes contain information about program resources and program execution state, including: • Process ID, process group ID, user ID, and group ID • Program code (text) • Registers • Stack (for temporary data) • Heap (for dynamic memory allocations) • Shared libraries

  5. UNIX Process

  6. Threads In the UNIX environment a thread: Exists within a process and uses the process resources Has its own independent flow of control . Duplicates only the essential resources it needs. May share the process resources with other threads that act equally independently (and dependently). Dies if the parent process dies - or something similar

  7. Cont. This independent flow of control is accomplished because a thread maintains its own: Program Counter Stack Space Register Set (i.e. space to store register values when not on the CPU) Priority (used for scheduling of CPU time). Thread ID

  8. UNIX Thread

  9. Pthreads POSIX Threads: is a POSIX standard for threads. The standard defines an API for creating and manipulating threads. Pthreads : Libraries implementing the POSIX Threads standard. Defined as a set of C language programming types and procedure calls, implemented with a pthread.h header file. Pthreads are most commonly used on Unix-like systems, but Microsoft Windows implementations also exist.

  10. Creating threads Initially, your main() program comprises a single, default thread. All other threads must be explicitly created by the programmer.

  11. Creating threads (cont.) int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void*), void *arg); Description: pthread_create() creates a new thread and makes it executable. This routine can be called any number of times from anywhere within your code.

  12. Creating threads (cont.) • pthread_create() arguments: • thread: An identifier for the new thread returned by the subroutine. • attr: An attribute object that may be used to set thread attributes. You can specify a thread attributes object, or NULL for the default values. Thread attributes includes stack size and scheduling information. • start_routine: the C routine that the thread will execute once it is created. • arg: A single argument that may be passed to start_routine. It must be passed by reference as a pointer cast of type void. NULL may be used if no argument is to be passed.

  13. Creating threads (cont.) • Return value: • If successful, the pthread_create() routine shall return zero • otherwise, an error number shall be returned to indicate the error.

  14. Terminating threads There are several ways in which a Pthread may be terminated: The thread returns from its starting routine. The thread makes a call to the pthread_exit() subroutine. The thread is canceled by another thread via the pthread_cancel routine. The entire process is terminated due to a call to either the exec or exit subroutines.

  15. Joining Threads int pthread_join(pthread_t thread, void ** thread_return); Description: • The pthread_join() function shall suspend execution of the calling thread until the target thread terminates. • Return value: • If successful, the pthread_join() function shall return zero; otherwise, an error number shall be returned to indicate the error.

  16. Joining Threads • PARAMETERS • thread • Is the thread to wait for. • thread_return • If thread_return is not NULL, the return value of thread is stored in the location pointed to by thread_return

  17. Example 1: Two threads displaying two strings “Hello” and “How are you?” independent of each other. #include <stdio.h> #include <pthread.h> #include <stdlib.h> void * thread1() { while(1){ printf("Hello!!\n"); } } void * thread2() { while(1){ printf("How are you?\n"); } • }

  18. cont. int main() { int status; pthread_t tid1,tid2; pthread_create(&tid1,NULL,thread1,NULL); pthread_create(&tid2,NULL,thread2,NULL); pthread_join(tid1,NULL); pthread_join(tid2,NULL); return 0; }

  19. Example /* pthread.c by detour@metalshell.com * Create multiple POSIX thread processes and wait for * each one to complete. * * http://www.metalshell.com/ */ #include <unistd.h> #include <pthread.h> #include <stdio.h> #include <time.h> #define NUM_THREADS 10

  20. void *thread_function(void *arg) { fprintf(stdout, "Thread: %d running.\n", (int)arg); // Sleep for arg+1 seconds to verify pthread_join. sleep((int)arg+1); fprintf(stdout, "Thread: %d done.\n", (int)arg); pthread_exit(0); }

  21. int main() { int cnt; pthread_t p_thread[NUM_THREADS]; for(cnt = 0; cnt < NUM_THREADS; cnt++) /* Returns 0 on successful creation of the thread. The second parameter, left NULL for this example, allows for options like CPU scheduling to be set. */ if(pthread_create(&p_thread[cnt], NULL, thread_function, (void *)cnt) != 0) fprintf(stderr, "Error creating the thread");

  22. // Cycle through each thread and wait until it is completed. for(cnt = 0; cnt < NUM_THREADS; cnt++) { // Waits for p_thread[cnt] to finish. pthread_join(p_thread[cnt], NULL); } fprintf(stdout, "All threads completed.\n"); return 0; }

More Related