Linux线程基础学习记录(线程的创建、回收以及结束)

0.线程特点

(1).线程共享资源:一个进程下的多个线程共享以下资源

                可执行的指令

                静态数据

                进程中打开的文件描述符

                当前工作目录

                用户ID

                用户组ID

(2).线程私有资源:

                线程ID

                PC(程序计数器)和相关寄存器

                堆栈

                错误号(errno)

                优先级

                执行状态和属性

一.C函数创建线程、回收线程、结束线程

1.创建线程 - pthread_create

功能

        创建一个线程,成功时返回(0),失败时返回错误码(errno)

参数:

        thread: 线程对象

        attr     : 线程属性,NULL则表示默认属性

        void*(*routine)(void*):线程执行的函数

        arg      :传递给线程执行函数的参数

int pthread_create(pthread_t *thread,const pthread_attr_t *attr,
                    void*(*routine)(void*),void *arg);

                

2.线程回收 - pthread_join

功能:

        回收线程资源,成功时返回0,失败返回错误码。

        调用线程阻塞直到pthread结束

参数:

        thread   : 线程对象,指定要回收的线程

        retval    : 接收线程返回值的地址

int pthread_join(pthread_t thread,void **retval);

3.线程结束 - pthread_exit

功能

        结束当前的线程,释放该线程的私有资源。

参数

        retval: 可被其他线程通过 pthread_join 获取。

void pthread_exit(void *retval);

4.线程创建、回收、结束,代码示例

#include <stdio.h>
#include <stdint.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>



char message[32] = "Hello World";
void *thread_func(void *arg);


int main()
{
    pthread_t a_thread;        //创建线程对象
    void *result;              //用于接收线程返回值
    int ret;

    /* 创建线程,绑定线程执行函数 */
    ret = pthread_create(&a_thread,NULL,thread_func,NULL);
    if(0 != ret)
    {
        printf("fail to pthread_create\n");
        exit(-1);
    }

    /* 阻塞等待回收线程资源 */
    pthread_join(a_thread,&result);            //将结果存入result
    printf("result is :%s\n",result);
    printf("message is :%s\n",message);


   return 0;
}


/* 线程函数 */
void *thread_func(void *arg)
{
    sleep(1);
    printf("thread_func has been created\n");
    strcpy(message,"marked by thread_func\n");
    
    /* 结束线程 */
    pthread_exit("thank you for waiting for me\n");     //线程结束返回参数信息
}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值