#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
void pthead_1()
{
while(1)
{
printf("I am the child \n");
sleep(1);
}
}
void main()
{
pthread_t pthread_id;
pthread_create(&pthread_id, NULL, &pthead_1, NULL);
printf("I am the father!\n");
sleep(2);
pthread_exit(0);
}
pthread_exit函数使主线程退出。
#include <stdio.h>
#include <pthread.h>
void pthread_1()
{
printf("I am the child!!\n");
sleep(2);
printf("I am exit!!\n");
}
void main()
{
pthread_t tid;
void *tret;
pthread_create(&tid, NULL, &pthread_1, NULL);
pthread_join(tid, &tret);
printf("Thread exit with code %d\n", (int)tret);
exit(0);
}
2)、主线程终止子线程
在posix thread中线程有两中取消状态:立即取消和延迟取消
立即取消就是pthread_cancel之后,不管理线程在干什么,马上终止这个线程
而延迟取消是在pthread_cancel之后,线程会继续运行,直到遇到一个 "取消点函数 "
系统默认的是延迟取消
如果想要结束线程有几个方法
a.线程设置为立即取消
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
程序如下
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
void pthead_1()
{
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
while(1)
{
printf("I am the child \n");
usleep(10000);
}
}
void main()
{
pthread_t pthread_id;
pthread_create(&pthread_id, NULL, &pthead_1, NULL);
sleep(2);
pthread_cancel(pthread_id);
printf("I make the child exit!!\n");
pthread_exit(0);
}
b.在你的线程中加入一些取消点函数的调用
while( 1 )
{
//sleep(1)或者pthread_testcancle();
}