先决条件:多线程,带有示例的C中的pthread_self()
pthread_cancel() =该函数使用线程ID取消特定线程。该函数向线程发送取消请求。
语法:-int pthread_cancel(pthread_t thread);
第一个程序:-取消自线程
// 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;
}
输出:
GeeksForGeeks
如果使用Linux,则编译此程序gcc program_name.c -lpthread
第二程序:-取消其他线程
// 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);
}
输出:
thread number one thread number two thread number one thread number two
如果使用Linux,则编译此程序gcc program_name.c -lpthread
注:本文由纯净天空筛选整理自 pthread_cancel() in C with example。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。