pthread_cancel() en C con ejemplo

requisito previo: subprocesamiento múltiple , pthread_self() en C con ejemplo

pthread_cancel() = Esta función cancela un hilo en particular usando la identificación del hilo. Esta función envía una solicitud de cancelación al hilo.

Sintaxis: – int pthread_cancel(pthread_t thread);

Primer programa: – Cancelar hilo propio

// C program to demonstrates cancellation of self thread 
// using thread id
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
  
void* calls(void* ptr)
{
    printf("GeeksForGeeks");
  
    // To exit the current thread
    // pthread_self() return the particular thread id
    pthread_cancel(pthread_self()); 
      
    return NULL;
}
  
int main()
{
    // NULL when no attribute
    pthread_t thread;
  
    // calls is a function name
    pthread_create(&thread, NULL, calls, NULL); 
  
    // Waiting for when thread is completed
    pthread_join(thread, NULL); 
  
    return 0;
}

Producción:

GeeksForGeeks

Si usa Linux, compile este programa gcc program_name.c -lpthread

Segundo programa: – Cancelar otro hilo

// C program to demonstrates cancellation of another thread 
// using thread id
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <pthread.h>
  
// To Count
int counter = 0; 
  
// for temporary thread which will be 
// store thread id of second thread
pthread_t tmp_thread; 
  
// thread_one call func
void* func(void* p) 
{
    while (1) {
  
        printf("thread number one\n");
        sleep(1);   // sleep 1 second
        counter++;   
        
        // for exiting if counter = = 5
        if (counter = = 2) {
  
            // for cancel thread_two
            pthread_cancel(tmp_thread); 
  
            // for exit from thread_one 
            pthread_exit(NULL);  
        }
    }
}
  
// thread_two call func2
void* func2(void* p) 
{
  
    // store thread_two id to tmp_thread
    tmp_thread = pthread_self(); 
  
    while (1) {
        printf("thread Number two");
        sleep(1); // sleep 1 second
    }
}
  
// Driver code
int main()
{
  
    // declare two thread
    pthread_t thread_one, thread_two; 
  
    // create thread_one
    pthread_create(&thread_one, NULL, func, NULL);
  
    // create thread_two 
    pthread_create(&thread_two, NULL, func2, NULL); 
  
    // waiting for when thread_one is completed
    pthread_join(thread_one, NULL); 
  
    // waiting for when thread_two is completed
    pthread_join(thread_two, NULL); 
  
}

Producción:

thread number one
thread number two
thread number one 
thread number two

Si usa Linux, compile este programa gcc program_name.c -lpthread

Este artículo es una contribución de Devanshu Agarwal . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *