The key points are;
- Threads are created with a call to pthread_create, the parameters are:
- The threads handle, consider it to be the equivalent of a file handle.
- The threads attributes. Normally the defaults are sufficient so use NULL, otherwise you might end up having to allocate the stack for it too.
- The function pointer to the threads "main", if this routine exits or returns it will implicitly end the thread just like the pthread_exit call.
- And a generic chunk of memory that is passed to the threads "main".
- pthread_join; this takes the threads handle and simply blocks until it gets the signal that the thread has ended. The second parameter is a pointer to the location of where to store the pointer for the threads exit.. gezz look at the function definition its more easy to understand than a written description of it.
- pthread_exit: This is the thread equivalent of exit but it can return a pointer to a complex piece of data.
And here is the sample code its really simple and just a brush up on threads for now
//complie with; g++ thread.cpp -lpthread #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> struct BaseA { pthread_t handler; //the handle to the thread.. a little dangerous! int number; }; //The thread core... void* thread_worker( void *ptr ) { BaseA *data = (BaseA*)ptr; for(int i = 0; i < 10; i++) { printf("Thread %d @ %d \n", data->number, i); sleep(rand()%3000/1000); } printf("Thread %d DONE!\n", data->number); pthread_exit(NULL); } int main() { srand(time(NULL)); BaseA data[2]; //setup the threads data[0].number = 1; data[1].number = 2; // create the threads pthread_create (&data[0].handler, NULL, &thread_worker, (void *) &data[0]); pthread_create (&data[1].handler, NULL, &thread_worker, (void *) &data[1]); //wait for all kids to complete pthread_join(data[0].handler, NULL); pthread_join(data[1].handler, NULL); exit(0); }
No comments:
Post a Comment