美文网首页
2018-07-03线程

2018-07-03线程

作者: 鹰击司马 | 来源:发表于2018-07-03 15:26 被阅读0次

    1、在只有一个控制线程的情况下,一个单线程进程要完成多个任务,只需要把这些任务串行化,但有多个控制线程时,相互独立的任务的处理就可以交叉进行,此时只需要为每个任务分配一个单独的线程,当然只有在两个任务的处理过程互不依赖的情况下,两个任务才可以交叉执行。
    2、交互的程序同样可以通过使用多线程来改善响应时间,多线程可以把程序中处理用户输入输出的部分与其他部分分开

    线程标识

    1、每个线程也有一个线程ID,进程ID在整个系统中是唯一的,但是线程ID不同,线程ID只有在它所属的进程上下文中才有意义
    2、进程ID是用pid_t数据类型来表示的,是一个非负整数。线程ID是用pthread_t数据类型来表示。

    #include <pthread.h>
    int pthread_equal(pthread_t id1, pthread_t id2)
    返回值:若相等,返回非0数值,否则,返回0
    作用:对两个线程ID进行比较
    
    #include <pthread.h>
    pthread_t pthread_self(void)
    返回值:调用线程的线程ID
    作用:线程调用该函数获得自身的线程ID
    

    线程创建

    1、在POSIX线程(pthread)的情况下,程序开始运行时,它也是以单进程中的单个控制线程启动的。在创建多个控制线程之前,程序的行为与传统的进程并没有什么区别

    int pthread_create(pthread_t *thread,
                       const pthread_attr_t *attr,
                       void *(*start_routine)(void*),
                       void *arg)
    返回值:若成功,返回0,否则,返回错误编号
    作用:创建一个线程
    

    当pthread_create成功返回时,新创建线程的线程ID会被设置成thread指向的内存单元,attr参数用于定制各种不同的线程属性,如果把其置为NULL,则是默认属性,新创建的线程从start_routine函数的地址开始运行,该函数只有一个无类型指针参数arg,如果需要向start_routine函数传递的参数有一个以上(一个以上),那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。

    线程终止

    1、单个线程可以通过3种方式退出

    (1)线程可以简单地从启动例程中返回,返回值是线程的退出码
    (2)线程可以被同一进程中的其他线程取消
    (3)线程调用pthread_exit

    #include  <pthread.h>
    void pthread_exit(void *ptr)
    ptr参数是一个无类型指针,与传给启动例程的单个参数类似。
    进程中的其他线程也可以通过调用pthread_join函数访问这个指针
    
    #include <pthread.h>
    int pthread_join(pthread_t thread, void **ptr)
    返回值:若成功,返回0,否则返回错误编码
    

    (未完待续)

    相关文章

      网友评论

          本文标题:2018-07-03线程

          本文链接:https://www.haomeiwen.com/subject/zladuftx.html