POSIX thread apis. The important POSIX thread apis are namely pthread_create, pthread_exit and pthread_joinCreate a thread
int pthread_create
(
pthread_t *thread,
const pthread_attr_t *attr,
void *( *start_routine)(void *),
void *arg
);Terminate a thread
void pthread_exit (void *retval);
Wait on a thread
int pthread_join (pthread_t thread, void **status);
The Complete Example
#include <pthread.h>
#include <iostream>
//File: SimpleThreadExample.cpp
#define MAX_THREADS 3
using namespace std;
void* func(void *args)
{
int tp = *(int *)args * 10;
while(tp--)
{
cout << *(int *) args;
fflush(stdout);
sleep(1);
}
cout << endl;
pthread_exit((void *)10);
return (void *)10;
}
int main(void)
{
pthread_t tid[MAX_THREADS] = {0};
int param[MAX_THREADS] = { 1, 2, 3 };
int rc;
for(int i = 0; i < MAX_THREADS; ++i)
{
rc = pthread_create(&tid[i], NULL, func, ¶m[i]);
if(0 != rc)
{
cout << "ERROR: Thread Creation failed" << endl;
}
cout << "Thread[" << tid[i] << "] Created" << endl;
}
void *status[3];
for(int i = 0; i < MAX_THREADS; ++i)
{
rc = pthread_join(tid[i], &status[i]);
}
for(int i = 0; i < MAX_THREADS; ++i)
{
cout << "Thread[" << tid[i] << "] returned with exit code=" << (long) status[i] << endl;
}
cout << "Main thread terminating" << endl;
return 0;
}
The makefile for the project
#-----------------------------------------------------------------------
# A simple thread example
#-----------------------------------------------------------------------
PROJECT := SimpleThreadExample
SRCEXT := .h .cpp
OBJEXT := .o
EXEEXT := .exe
#compilers
CC := gcc
CXX := g++
#flags
CFLAGS := -o
CXXFLAGS := -o
LDFLAGS := -lpthread -o
#disable implicit suffix rules
.SUFFIXES:
.SUFFIXES: $(SRCEXT) $(OBJEXT) $(EXEEXT)
SRC := \
SimpleThreadExample.cpp
OBJ := \
$(SRC:.cpp=.o)
EXE := \
$(PROJECT)$(EXEEXT)
#define dummy targets
.PHONY: all clean compile link
all : compile link
clean :
@echo
@echo "Cleaning Temporary Files..."
$(RM) $(OBJ) $(EXE)
compile : $(OBJ)
link : $(EXE)
$(OBJ) :
@echo
@echo "Compiling Source Files..."
$(CXX) $(CXXFLAGS) $(OBJ) $(SRC)
$(EXE) :
@echo
@echo "Linking..."
$(LD) $(OBJ) $(LDFLAGS) $(EXE)
run :
@echo
@$(EXE)
Building the project. (The output is from Cygwin Environment. You may need to modify the makefile to compile it on a linux environment)
$ gmake clean all Cleaning Temporary Files... rm -f SimpleThreadExample.o SimpleThreadExample.exe Compiling Source Files... g++ -o SimpleThreadExample.o SimpleThreadExample.cpp Linking... ld SimpleThreadExample.o -lpthread -o SimpleThreadExample.exeOutput:
No comments:
Post a Comment