zoukankan      html  css  js  c++  java
  • linux线程应用

    一、线程(pthread)的概念

    产生60年代,遵循POSIX线程接口

    二、线程与进程的区别

    1、进程:在子进程中需要分配新的地址空间,  拷贝代码段、数据段、堆栈段,进程间通过IPC通信。线程:实现全部共享。总之,线程节约资源

    2、一个进程包括多个线程,线程之间地址相同,线程开销小

    3、独立的数据只能通进程,而同一线程则共享数据。

    4、进程:资源分配的基本单位。线程:调度的基本单位

    三、线程创建

    1、头文件:#include<thread.h>  链接库  -lpthread (gcc -o des src -lpthread)

    2、int pthread_create(pthread_t * tidp,const pthread_attr_t *attr,void *(*start_rtn)(void),void *arg)(ID号,属性NULL,线程执行的指针函数,参数指针)

    四、线程终止

    1、线程使用exit()和_exit()终止,正常终止的三种方式:(1)、例程中终止 (2)、线程被另一个进程终止(3)、线程调用pthread_exit()函数

    2、线程退出

    void pthread_exit(void * rval_ptr)  其中:rval_ptr为退出时返回值的指针

    五、线程等待

    int pthread_join(pthread_t tid,void **rval_ptr)

    功能:当阻塞时,调用线程,知道指定的线程终止

    六、线程标识

    pthread_t pthread_self(void)  返回ID

    七、线程清除

    1、正常终止(pthread_exit、return )

        注意:return  时,不执行清理函数pthread_cleanup_XXX。其他,则执行清理函数(前提:pop(0)为0)

      异常终止  :自身运行出错,返回空指针等,执行清理函数。

    2、void pthread_cleanup_push(void (*rtn)(void *),void *arg)

       void pthread_cleanup_pop(int execute)

        (execute 为0表示执行,为1表示不执行)

    实例代码

    #include<stdio.h>
    #include<unistd.h>
    #include<pthread.h>

    void *fun(void *p)
    {
    int i;
    int j=*((int*)p); //把P强制转换成void*类型,并且返回其所指的对象,赋值给j;
    //int *num;
    //num=(int *)p;
    //int j=*num;
    for(i=0;i<10;i++)
     {
        printf("%d\n",j++);
     }
    pthread_exit(NULL);  //结束当前线程
    }
    int main()
    {
    int m;
    int a=1;
    int b=101;
    int *attr=&a;
    pthread_t p_thread; 
    m=pthread_create(&p_thread,NULL,(void *)fun,(void*)attr);  //创建新线程 (pthread用来保存新线程的ID,NULL为新线程的属性为默认,fun是新线程执行的函数必须是void*(void  ))类型,(void*)&a是前面函数的实参)    m为创建成功与否的返回值
    sleep(1);
    pthread_cancel(p_thread); //强制结束p_thread这个线程
    fun((void*)&b);//主线程调用fun()函数
    }

  • 相关阅读:
    文件的打开和保存
    eclipse快捷键汇总
    FileNameExtensionFilter文件过滤
    java中文件保存、打开文件对话框
    FileInputStream(字节流)与fileReader(字符流) 的区别
    Java文本编辑器中遇到的问题详解
    前端基础 之 BOM和DOM
    前端基础 之JS
    前端基础 之 CSS
    前端基础之 HTML
  • 原文地址:https://www.cnblogs.com/jiangu66/p/2996597.html
Copyright © 2011-2022 走看看