Linux软件高级编程-线程基本概念--day7

本文介绍了C语言中的exec函数族用于进程空间执行其他代码,包括参数传递方式和环境变量管理。同时详细讲解了线程的基本概念、创建与调度,以及多进程与多线程的优缺点和相关函数接口,如pthread_create、pthread_exit和pthread_join。
摘要由CSDN通过智能技术生成

1.exec函数族

extern char **environ;

    int execl(const char *path, const char *arg, ...
                    /* (char  *) NULL */);
    int execlp(const char *file, const char *arg, ...
                    /* (char  *) NULL */);
    int execle(const char *path, const char *arg, ...
                    /*, (char *) NULL, char * const envp[ ] */);
    int execv(const char *path, char *const argv[ ]);
    int execvp(const char *file, char *const argv[ ]);
    int execvpe(const char *file, char *const argv[ ],
                    char *const envp[ ]);

     功能:

                利用进程空间执行另外一份代码

      l:参数以列表形式传递

     v:参数以指针数组形式传递

     e:更新环境变量

     p:在指定目录下查找文件

getenv

       char *getenv(const char *name);

       功能:

       获得环境变量名对应的值
   

 
setenv

       int setenv(const char *name, const char *value, int overwrite);
       功能:
        设置环境变量的值
       参数:
        name:环境变量名
        value:环境变量的值
        overwrite:非0 覆盖
                  0   不覆盖
    返回值:
        成功返回0 
        失败返回-1 

2.线程

          1)基本概念

          线程:线程是一个轻量级的进程,位于进程空间内部每一个进程可以创建多个线程

          2)线程创建

          线程独占栈空间,文本区、数据段和堆区与进程共享

          3)线程调度

          与进程调度是一样的--------宏观并行,微观串行

          4)线程消亡

          与进程消亡是一样的

          5)进程和线程的区别

          进程是操作系统资源分配的最小单元

          线程是CPU任务调度的最小单元       

          6)多进程和多线程的优缺点

          效率:多线程>多进程

                     多线程只需在同一进程空间内切换

                     多进程需要在不同的空间中切换

           通信:多线程>多进程

                      线程共享全局变量,可以通过全局变量实现数据通信

                      进程空间是独立的,没有共享空间,通信实现比较复杂

           通信实现:多进程>多线程

                       线程共享空间操作时会引发资源竞争

                       进程没有共享空间,不存在资源竞争的问题

           安全:多进程>多线程

                      一个进程异常不会影响进程空间

                      一个线程异常结束会导致进程异常结束,进程异常结束,该进程内所有线程任务均                        无法向下进行

           7)线程相关的函数接口

           创建:fork      pthread_create

           退出: exit      pthread_exit 

           回收: wait      pthread_join 

1)pthread_create

           int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                          void *(*start_routine) (void *), void *arg);
          功能:
            在该进程中创建一个新的线程
          参数:
            thread:存放线程ID空间首地址
            attr:线程属性空间首地址
            start_routine:线程要执行的函数的入口
            arg:给线程函数的参数
          返回值:
            成功返回0 
            失败返回错误码

        编译时加 -lpthread选项

2)pthread_self

          pthread_t pthread_self(void);
          功能:
            获得调用该函数线程的ID  

3)pthread_exit 

          void pthread_exit(void *retval);
          功能:
            让调用该函数的线程任务结束
          参数:
            retval:线程结束的值


4)pthread_join 

          int pthread_join(pthread_t thread, void **retval);
          功能:
            回收线程空间
          参数:
            thread:线程的ID号
            retval:存放线程结束状态空间的首地址
          返回值:
            成功返回0 
            失败返回错误码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值