zoukankan      html  css  js  c++  java
  • 【读书笔记】线程栈属性

           线程的栈是线程的私有数据,这部分内容是不共享的。在一个进程内有多个线程,这些线程都有自己的栈,但是又都要挤在进程的虚拟地址空间内。线程之间的栈内存必须保证彼此不冲突线程才能正确地运行。因此,虽然大多数情况下,由系统为用户设置和线程的栈内存,但有些时候还是需要用户亲自对线程进行设置。

            线程基本属性中和线程栈有关的属性有三个,分别是线程栈的大小、线程栈的最低地址和线程栈末尾警戒区的大小。

            系统默认为一个新建的线程提供PAGESIZE个字节的栈空间,但是很多时候需要更改此值。有时候该线程栈可能会不够用,例如,线程体函数是一个多层递归函数,该函数的特点就是需要多层嵌套栈来保存执行过程,因此,该函数可能会造成现有的栈尺寸缩小。另一中情况刚刚相反,用户进程空间的大小是固定的。如果进程内的线程太多,那么就会造成进程的虚拟地址空间不够用,这个时候减小每一个线程的栈的大小是一个必须采取的措施。

            Linux下使用pthread_attr_getstacksize函数得到栈大小属性值,pthread_attr_setstack函数设置该属性,其函数原型如下:

            #include<pthread.h>

            int pthread_attr_getstacksize(const pthtead_attr_t *restrict attr,void **restrict stackaddr,size_t *restrict stacksize)

            int pthread_attr_setstacksize(const pthread_attr_t  *attr,void *stackaddr,size_t *stacksize)

    例子:

    1. #include <unistd.h>  
    2. #include <stdio.h>  
    3. #include <stdlib.h>  
    4. #include <pthread.h>  
    5.   
    6. voidthread()  
    7. {  
    8.   pthread_attr_t pattr;  
    9.   size_t size = 0;  
    10.   printf("default size:%d\n", size);  
    11.   pthread_attr_getstacksize(&pattr, &size);  
    12.   printf("current thread stack size:%d\n", size);  
    13.   return (void*)0;  
    14. }  
    15.   
    16. int main()  
    17. {  
    18.   pthread_t ptd;  
    19.   pthread_create(&ptd, NULL, thread, NULL);  
    20.   pthread_join(ptd, NULL);  
    21.   printf("main thread quit!\n");  
    22. }  

    线程是提高代码响应和性能的有效手段,它类似于进程。与进程一样,线程由系统内核按时间片进行管理。在单处理系统中,系统内核使用时间片来模拟线程的并发执行。同一进程中的线程共享如下内容。

    1,全局变量

    2,堆数据

    3,打开的文件描述符

    4,当前工作目录

    5,用户及用户组ID

    但每个线程有自己独立的线程ID、堆栈、errno变量、优先级

           常见的线程相关的函数

    1,pthread_create:创建一个进程

    2,pthread_join:挂起当前线程直到所等待的线程结束

    3,pthread_detach:线程分为“可联合的‘或”可分离的“。可联合的线程终止后,系统将保留其线程ID和退出状态,知道另一个线程调用pthread_jion函数。该函数将一个线程设置为“可分离”的。

    4,pthread_self:返回当前线程ID

    5,pthead_cancle:用于终止指定线程的执行。

  • 相关阅读:
    linux shell 总结
    python小结
    python与execl的读写
    利用burpsuits暴力破解登陆界面
    python之函数的使用
    Sublime text怎么识别input函数
    ping的禁止
    Hbase的配置与使用
    JAVA 利用反射自定义数据层框架
    JAVA实现网页上传头像
  • 原文地址:https://www.cnblogs.com/ymy124/p/2354742.html
Copyright © 2011-2022 走看看