http://www.cs.cf.ac.uk/Dave/C
Tried to find the simplest example of using pthread_create for a beginner. The man page of pthread_create, again, is rather a reference for experts who already know how to use pthread_create.
Here I have the simplest working code without all the distractions:
#include <stdio.h> #include <pthread.h> void* threadFunction(){//the function is the entry point of a new thread printf("Catch = %d\n",22); } int main(){ pthread_t threadId;//to record the thread id of the newly created thread //effectively pthread_t is type unsigned long int pthread_create(&threadId, NULL, threadFunction, NULL); //threadFunction, inputArg together is a function call equivalent to the //more familiar form: threadFunction(inputArg); pthread_join(threadId,NULL); //this function call forces the main() is waiting for the thread to complete. //(for the thread to "join" back?) //Otherwise, the main //may exit before the thread finishes, thus aborts the thread prematurely printf("threadId = %lu\n",threadId); return 0; }
The thread function takes exactly one entrance parameter, similar to main() you can have main(char argc, char** argv). It is common practice to have the entrance parameter be a struct so that complicated data can be passed into the thread.
#include <stdio.h> #include <pthread.h> void* threadFunction(void* threadFunctionArg){ int* pMax = threadFunctionArg; printf("Double the input =%d\n",*pMax * 2); } int main(){ int num=5;//some information to pass to the new thread pthread_t threadId;//to record the thread id of the newly created thread //effectively pthread_t is type unsigned long int int threadStatus;//to record the return status of the new thread //0 means good, otherwise an error number is recorded. void* inputArg = #//used to pass into the thread function threadStatus = pthread_create(&threadId, NULL, threadFunction, inputArg); //threadFunction, inputArg together is a function call equivalent to the //more familiar form: threadFunction(inputArg); pthread_join(threadId,NULL); //the main() is waiting for the thread to complete. Otherwise, the main //may exit before the thread finishes, thus aborts the thread prematurely printf("threadId = %lu\n",threadId); printf("threadStatus = %d\n",threadStatus); return 0; }/********************END******************/
No comments:
Post a Comment