今天我们编写一个程序来实现线程有关的函数:
本程序使用了下两个线程相关的函数
(1)pthread_join函数
(2)pthread_detach函数
这两个函数的详细用法在前面的博客中介绍过了,这里就不介绍了。
代码实现:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
void *tfn(void *arg)
{
int n = 3;
while (n--) {
printf("thread count %d\n", n);
sleep(1);
}
pthread_exit((void *)1);//退出带返回值
}
int main(void)
{
pthread_t tid;
void *tret;
int err;
pthread_create(&tid, NULL, tfn, NULL);
pthread_detach(tid); //让线程分离 ----自动退出,无系统残留资源
while (1) {
err = pthread_join(tid, &tret);//获取退出线程状态
printf("-------------err= %d\n", err);
if (err != 0)
fprintf(stderr, "thread_join error: %s\n", strerror(err));
else
fprintf(stderr, "thread exit code %d\n", (int)tret);
sleep(1);
}
return 0;
}
程序运行结果:
thread count 2
-------------err= 22
thread_join error: Invalid argument
thread count 1
-------------err= 22
thread_join error: Invalid argument
thread count 0
-------------err= 22
thread_join error: Invalid argument
-------------err= 22
thread_join error: Invalid argument
一直循环打印,为什么会打印22,因为线程分离状态下不能够用pthread_join正常回收,返回错误号22。