UNIX环境高级编程学习之第十一章线程-线程的创建、退出、等待、取消、分离

Linux/Unix C/C++ xiujie 133℃ 0评论 已收录

UNIX环境高级编程学习之第十一章线程-线程的创建、退出、等待、取消、分离

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
void* thread_fun(void* arg)  // 线程执行函数1
{
        printf("fun:hello world!/n");
        return (void*)1;
}
void* thread_fun2(void* arg)  // 线程执行函数2
{
        printf("fun 2:tid = %ul/n", pthread_self()); // pthread_self() 调用当前线程ID
        pthread_exit((void*) 2);  // 线程退出
}
void* thread_fun3(void* arg)  // 线程执行函数3
{
        while (1)
        {
                printf("fun 3:tid = %ul/n", pthread_self());
                sleep(5);
        }
        return (void*)3;
}
int main(int argc, char* argv[])
{
        const int n = 3;
        int i, ret;
        void* tret;
        pthread_t tid[n];
        ret = pthread_create(&tid[0], NULL, thread_fun, NULL); // 线程创建
        if (ret != 0)
        {
                printf("pthread_create 0 Error/n");
        }
        ret = pthread_create(&tid[1], NULL, thread_fun2, NULL); // 线程创建
        if (ret != 0)
        {
                printf("pthread_create 1 Error/n");
        }
        ret = pthread_create(&tid[2], NULL, thread_fun3, NULL); // 线程创建
        if (ret != 0)
        {
                printf("pthread_create 2 Error/n");
        }
        ret = pthread_detach(tid[2]);// 线程分离, 线程分离后,底层资源立即回收,再用pthread_join取状态会报错。
        if (ret != 0)
        {
                printf("pthread_cancel Error/n");
        }
        ret = pthread_cancel(tid[2]);// 线程取消
        if (ret != 0)
        {
                printf("pthread_cancel Error/n");
        }
        for (i = 0;i < n;i++)
        {
                ret = pthread_join(tid[i], &tret); // 取线程退出状态
                if (ret != 0)
                {
                        printf("%d. pthread id:%ul, pthread_join Error!/n",
                                i, tid[i]);
                }else{
                        printf("%d. pthread id:%ul, pthread_fun return value:%d /n",
                                i, tid[i], (int)tret);
                }
        }
		sleep(15);
        return 0;
}


喜欢 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址