Linux C/C++多线程

本文详细介绍了POSIX标准中的线程接口,包括线程标识符、创建、终止方法(如pthread_create, pthread_exit, pthread_join)以及同步机制(如互斥锁、条件变量)。同时涵盖了线程清理函数和进程与线程的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

讨论的线程接口来自POSIX标准,头文件#include <pthread.h>

线程标识

       pthread_t //线程ID

       int pthread_equal(pthread_t tid1, pthread_t tid2);//两个线程ID比较,返回值:若相等则返回非0值,否则返回0 

       pthread_t pthread_self(void);//获取自身的线程ID

线程创建

函数原型:
    int pthread_create(thread_t *thread,const pthread_attr_t *attr,void *(start_routine)(void*),void *arg);
                                                                                              返回值:若成功返回零,不成功返回错误编号
参数说明:
    thread:               指向线程标识符的指针(可以在线程运行过程中用pthread_self获得)。
    attr:                     用来设置线程属性。NULL 默认值
    start_routine:   线程运行函数的起始地址。
    arg:                    运行函数的参数。

线程终止

(1)线程从启动例程中返回,在不终止整个进程的境况下停止它的控制流

(2)线程可以被同一进程中的其他线程取消pthread_cancel(pthread_t tid)

(3)线程调用pthread_exit(void *rval_ptr)

pthread_join(pthread_t thread, void **ptr)

        调用线程将一直阻塞,直到指定的线程调用pthread_exit、从启动例程中返回或者被取消。如果线程被取消,由rval_ptr指定的内存单元为PTHREAD_CANCELED。

如果线程已经处于分离状态,pthread_join调用失败,返回EINVAL。

pthread_cancel(pthread_t tid)

         不等待线程终止,它仅仅提出请求。

线程清理函数

    void pthread_cleanup_push(void (*rtn)(void *), void *arg);

    void pthread_cleanup_pop(int execute);

执行顺序与它们注册的顺序相反  ,

pthread_cleanup_push 执行

        调用pthread_exit时、响应取消请求时、用非零execute参数调用pthread_cleanup_pop时

如果execute 参数值为0,清理函数不被调用。

进程原语和线程原语的比较

进程原语

线程原语

描述

fork

pthread_create

创建新的控制流

exit

pthread_exit

从现在的控制流中退出

waitpid

pthread_join

从控制流中得到退出状态

atexit

pthread_cleanup_push

注册在退出控制流时调用的函数

getpid

pthread_self

获取控制流的ID

abort

pthread_cencel

请求控制流的非正常退出

线程同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值