zoukankan      html  css  js  c++  java
  • 线程属性与调度学习

    线程属性:

    1.线程的分离状态

      线程的分离状态决定一个线程以什么样的方式来终止自己。非分离的线程终止时,其线程ID和退出状态将保留,直到另外一个线程调用pthread_join.分离的线程在当它终止时,所有的资源将释放,我们不能等待它终止。

    设置线程分离状态的函数为 pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)。第二个参数可选为PTHREAD_CREATE_DETACHED(分离线程)和 PTHREAD _CREATE_JOINABLE(非分离线程)。这里要注意的一点是,如果设置一个线程为分离
     
    线程,而这个线程运行又非常快,它很可能在 pthread_create函数返回之前就终止了,它终止以后就可能将线程号和系统资源移交给其他的线程使用,这样调用pthread_create的线程就得到了错误的线程号。要避免这种情况可以采取一定的同步措施,最简单的方法之一是
     
    可以在被创建的线程里调用 pthread_cond_timewait函数,让这个线程等待一会儿,留出足够的时间让函数pthread_create返回。设置一段等待时间,是在多线程编程里常用的方法。(https://www.cnblogs.com/lidabo/p/5009249.html)

    2.线程栈末尾的警戒缓冲区大小

    3.线程栈的最低地址

    4.线程栈的大小

    5.scope属性(表明是与系统中所有线程竞争cpu还是和本进程中的其他线程竞争cpu)

    创建一个以非分离态运行的线程:

    void createThread(void)

    {

      pthread_attr_t threadAttr;

      pthread_t mThread;

      if (!pthread_attr_init(&threadAttr))
            {
                if (!pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_JOINABLE))
                {
                    if (!pthread_create(&mThread, &threadAttr, threadFunc, this))
                    {
                        printf("create thread success! ");
                    }
                }
                pthread_attr_destroy(&threadAttr);
            }

    }

    2 . 线程优先级设置

    pthread_attr_t threadAttr;
    pthread_t mThread = pthread_self();

    if (!pthread_attr_init(&threadAttr))

    {

      newprio = 15;

      int schedPolicy;
           sched_param schedParam;

      if (!pthread_getschedparam(mThread, &schedPolicy, &schedParam))

      {

        param.sched_priority=newprio;

        if (!pthread_setschedparam(mThread, schedPolicy, &schedParam))

        {

            printf("thread priority set success! ");

        }

      }

    }

    pthread_attr_destroy(&threadAttr);

  • 相关阅读:
    怎么用javascript进行拖拽[zt]
    FireFox不支持disableoutputescaping(zt)
    xslt中的Javascript取得xml中的参数
    因为查询无法同时更新聚集键和 text、ntext 或 image 列
    FireFox下操作IFrame
    xslt中formatnumber()
    linuxgrepregular expression(regex)
    pl/sqlescape& quotation
    linuxsed command
    linuxfind command(transferred)
  • 原文地址:https://www.cnblogs.com/doulcl/p/11350573.html
Copyright © 2011-2022 走看看