线程的总结

来源:互联网 发布:贝叶斯网络训练 编辑:程序博客网 时间:2024/05/17 18:46

      UNIX进程有了多个控制线程以后,在程序设计时可以把进程设计成在同一时间不止做一件事情,每个线程处理各自独立的任务。

      线程与进程的关系:

      线程包含了表示进程执行环境必须的信息,其中包含表示线程的线程ID,一组寄存器值,栈,调度优先级和策略,信号屏蔽字,errno变量以及线程私有数据。

      进程的所有信息对该进程的所有线程都是共享的,包含可执行的程序文本,程序的全局内存和堆内存,栈以及文件描述符。

      关于线程ID的函数

      #include <pthread.h>

      int pthread_equal(pthread_t tid1,pthread_t tid2);//比较两个线程ID,相当返回0

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

      (1)线程的创建

        #include <pthread.h>

        int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr,void *(*start_rin)(void),void *restrict arg);

        成功返回0

        第一个参数指向的内存单元被设置成新创建线程的线程ID。

        attr参数用于定制线程属性,这里设置为NULL。

        第三个参数可以传递一个函数的指针

        如果函数有参数,那么可以把参数作为一个结构体由第四个参数传入。(线程的创建并不能保证哪个线程会先运行)

       (2)线程终止(线程还可以被同一进程的其他线程取消)

           #include <pthread.h>

           void pthread_exit(void *rval_ptr);

           rvtal_ptr就是一个指针

           可以用

           int pthread_join(pthread_t thread,void** rval_ptr);//来访问

           如果成功就返回0,失败则返回错误编号

          调用线程将一直阻塞,直到指定的线程调用pthread_exit,从启动历程中返回会被取消。

          若对线程返回值不感兴趣,那么久可以把rtval_ptr设置为NULL,这样就光等待指定线程终止。

          示例代码

#include <stdio.h>

#include <pthread.h>


void *fun(void* arg)
{
    printf("线程id%d\n",pthread_self());
    pthread_exit(NULL);
}


int main()
{


    pthread_t id;
    pthread_create(&id,NULL,fun,NULL);//线程在创建的这一刻就开始调用函数fun了
    if( pthread_join(id,NULL)==0)
    {
         printf("线程结束\n");
    }
    printf("进程的线程id%d\n",pthread_self());
    return 0;


}


        

0 0
原创粉丝点击