• 多线程程序设计


    1、基本概念

    a、线程就是“轻量级”的进程

    b、线程与创建它的进程共享代码段和数据段

    c、线程拥有自己的独立的栈。

    2、函数学习

    1)创建线程

    函数名:pthread_create

    函数原型:Int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine)(void *),void *arg);

    函数功能:在调用进程当中去创建新的线程

    所属头文件:<pthread.h>特别注意:编译时必须使用gcc –lpthread

    返回值:成功:返回0.失败:返回错误编码

    参数说明:Thread:新创建的线程的id

    Attr:待创建线程的属性,一般为空

    Start_routine:指定线程要执行的函数(线程的入口函数)

    Arg:线程入口函数的参数,可以为空。

    2)等待线程结束

    函数名:Pthread_join

    函数原型:Int pthread_join(pthread_t thread,void **retval);

    函数功能:用于等待线程结束

    所属头文件:<pthread.h>特别注意:同样编译时必须使用gcc –lpthread

    返回值:成功:返回0.失败:返回错误编码

    参数说明:Thread:要等待结束的线程的id

    Retval:用于保存线程退出时的状态,一般采用空,不保存。

    3)退出线程(不能使用exit退出线程,如果使用的话,会使创建线程的进程也退出)

    函数名:Pthread_exit

    函数原型:Void pthread_exit(void *retval);

    函数功能:结束线程

    所属头文件:<pthread.h>特别注意:同样编译时必须使用gcc –lpthread

    返回值:返回为空 

    参数说明:Retval:用于保存返回值

    4)线程互斥

    在实际应用中,多个线程往往会访问同一数据或资源,为避免线程之间相互影响,需引入线程互斥机制,而互斥锁是互斥机制中的一种。

    1、 初始化互斥锁

    Pthread_mutex_init

    作用:用来初始化互斥锁

    mutex:初始化互斥锁的指针。

    Attr:初始化互斥锁属性

    返回值:成功:0.失败:返回:错误的编码。

    2、 获取互斥锁

    Pthread_mutex_lock

    作用:用于锁住互斥锁

    Mutex:用于指明要锁住的互斥锁。

    返回值:成功:0.失败:返回:错误的编码。

    3.释放互斥锁

    Pthread_mutex_unlock

    作用:用于解除互斥锁

    Mutex:用于指明要解除的互斥锁

    返回值:成功:0.失败:返回:错误的编码。

    注意:祖先进程结束,那么子孙线程会结束。而祖先进程结束,子孙进程不会结束。

    实例:让A进程创建两个线程A1和A2来做任务

    thread.c

  • 相关阅读:
    使用tcmalloc编译启动时宕机
    使用tcmalloc编译出现undefined reference to `sem_init'
    使用AddressSanitizer做内存分析(一)——入门篇
    VIM-美化你的标签栏
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
    Entity Framework Code First (一)Conventions
  • 原文地址:https://www.cnblogs.com/gary-guo/p/5581936.html
Copyright © 2020-2023  润新知