0% found this document useful (0 votes)
21 views

Operating Systems 9

The document discusses the POSIX pthreads library for creating and managing threads in C/C++ programs. It covers the main pthread functions for creating threads with pthread_create, joining threads with pthread_join, and terminating threads with pthread_exit. Examples are provided to demonstrate basic thread creation and usage of these functions.

Uploaded by

ayesha abid
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
21 views

Operating Systems 9

The document discusses the POSIX pthreads library for creating and managing threads in C/C++ programs. It covers the main pthread functions for creating threads with pthread_create, joining threads with pthread_join, and terminating threads with pthread_exit. Examples are provided to demonstrate basic thread creation and usage of these functions.

Uploaded by

ayesha abid
Copyright
© © All Rights Reserved
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 15

Operating

Systems
Lecture 9
Agenda for Today
 Pthreads library with examples
Pthreads
A POSIX standard (IEEE 1003.1c) API for
thread creation, termination, and
synchronization.
API specifies the behavior of the
thread library, implementation is up to
developers of the library.
Common in UNIX operating systems.
Creating a Thread

 int pthread_create (pthread_t *threadp,


const pthread_attr_t *attr,
void* (*routine)(void *),
arg *arg);
Creating a Thread
Where:
threadp The thread we are trying to create—thread ID
(TID)
attr Used to modify the thread attributes (stack size,
stack address, detached, joinable,
priority, etc.)
routine The thread function
arg Any argument we want to pass to the thread
function. This does not have to be a simple
native type, it can be a ‘struct’ of whatever we
want to pass in.
Error Handling
pthread_create() fails and
returns the corresponding value if any
of the following conditions is detected:
EAGAIN The system-imposed limit on
the total number of threads in a process
has been exceeded or some system
resource has been exceeded (for
example, too many LWPs were created).
Error Handling
EINVAL The value specified by attr
is invalid.
ENOMEM Not enough memory was
available to create the new thread.
Error handling:
• #include <errno.h>
• Error handling code
Joining a Thread
Waiting for a thread
int pthread_join(pthread_t aThread,
void **statusp);
‘statusp’ get return value of
pthread_exit
Joining a Thread
Cannot join with a detached thread
Can only join with thread’s in the same
process address space
Multiple threads can join with one
thread but only one returns
successfully; others return with an error
that no thread could be found with the
given TID
Terminating a Thread
Main thread terminates
Thread returns
void pthread_exit(void *valuep)
Returns value pointed to by
‘valuep’ to a joining thread,
provided the exiting thread is not
detached
Example 1
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
/* Prototype for a function to be passed to our thread */
void* MyThreadFunc(void *arg);
int main()
{
pthread_t aThread;
/* Create a thread and have it run the MyThreadFunction */
pthread_create(&aThread, NULL, MyThreadFunc, NULL);
/* Parent waits for the aThread thread to exit */
pthread_join(aThread, NULL);
printf ("Exiting the main function.\n");
return 0;
}
Example 1
void* MyThreadFunc(void* arg)
{
printf ("Hello, world! ... The threaded version.\n");
return NULL;
}

$ gcc hello.c –o hello –lpthread –D_REENTRANT


$ hello
Hello, world! ... The threaded version.
Exiting the main function.
$
Example 2
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5

void *PrintHello(void *threadid)


{
printf("\n%d: Hello World!\n", threadid);
pthread_exit(NULL);
}
Example 2
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc, t;

for (t=0; t < NUM_THREADS; t++) {


printf("Creating thread %d\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc) {
printf("ERROR; return code is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
Recap of Lecture
Pthreads library
Sample code
Pthread calls: pthread_create,
pthread_join, pthread_exit

You might also like