How to destroy thread in c linux

16,972

um, I think what you really want to do is like that:

bool received_data = false;
bool beExit = false;    
struct recvPacket;

pthread_mutex_t recvMutex;

void main()
{
    pthread_t thread1;
    void *status;

    pthread_mutex_init(&recvMutex, NULL);
    pthread_create(&thread1, NULL, myFun,  (void*) NULL);        

    while(1)
    {
        if (received_data) {
           pthread_mutex_lock(&recvMutex);             // you should also synchronize received_data and beExit valuables, cuz they are shared by two threads
           /* do what you want with recvPacket */
           pthread_mutex_unlock(&recvMutex);

           received_data == false;
        }

        /* do else you want, or you can let beExit = true to stop the thread */
    }

    if (err = pthread_join(thr_main, &status))
      printf("pthread_join Error. %s\n", strerror(err)), exit(1);
}

void * myFun(void *ptr)
{
    while (!beExit) {
        if (true == tryRecvPacket()) {
           pthread_mutex_lock(&recvMutex);
           /* fill data to recvPacket */
           pthread_mutex_unlock(&recvMutex);
           received_data = true;
        }
    }
}
Share:
16,972
pramod kumar
Author by

pramod kumar

Updated on June 04, 2022

Comments

  • pramod kumar
    pramod kumar almost 2 years

    I need a thread that will call continuously in while(1), but when i use to call thread function by pthread_create() a new thread creates.
    I need help on following points :~
    1) Is there any method to call thread function without creating thread.
    2) Is there any method to destroy the previous thread.

    Sample code is

    void main()
    {
    pthread_t thread1;
     while(1)
     {
            pthread_create( &thread1, NULL, myFun,  (void*) NULL);
     }
    }
    void * myFun(void *ptr)
    {
    printf("Hello");
    }
    


    * We can not create more than 380 threads, Here we have to use only single thread.