• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            小默

            thread 線程屬性 脫離線程

            線程的屬性

            脫離線程:不向主線程返回信息,不需要主線程等待.
            通過(guò)兩種方法創(chuàng)建:
            調(diào)用pthread_detach;
            修改線程的屬性. <- 這里使用

            #include <pthread.h>
            int pthread_attr_init(pthread_attr_t *attr);
            初始化一個(gè)線程屬性對(duì)象.
            pthread_destroy
            回收一個(gè)線程屬性對(duì)象.

            #include <pthread.h>
            int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate);
            int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate);
            這個(gè)屬性允許我們無(wú)需對(duì)線程進(jìn)行合并:
            | PTHREAD_CREATE_JOINABLE 默認(rèn).
            | PTHREAD_CREATE_DETACHED 不能調(diào)用pthread_join來(lái)獲得另一個(gè)線程的退出狀態(tài).

            int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);
            int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);
            控制線程的調(diào)度方式:
            | SCHED_OTHER 默認(rèn)
            | SCHED_RP   循環(huán)(round_robin) <- 下面2個(gè)調(diào)度方式具備實(shí)時(shí)調(diào)度功能,需要root權(quán)限.
            | SCHED_FIFO 先進(jìn)先出

            int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
            int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
            和schedpolicy配合使用,控制SCHED_OTHER線程的調(diào)度策略.

            int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit);
            int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inherit);
            | PTHREAD_EXPLICIT_SCHED 調(diào)度由屬性明確設(shè)置.
            | PTHREAD_INHERIT_SCHED  新線程沿用創(chuàng)建者的屬性.

            int pthread_attr_setscope(pthread_attr_t *attr, int scope);
            int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);
            控制一個(gè)線程調(diào)度的計(jì)算方式,目前Linux只支持PTHREAD_SCOPE_SYSTEM.

            int pthread_attr_setstacksize(pthread_attr_t *attr, int scope);
            int pthread_attr_getstacksize(const pthread_attr_t *attr, int *scope);
            控制線程創(chuàng)建的棧大小,單位字節(jié).可選.
            Linux在實(shí)現(xiàn)線程時(shí),默認(rèn)的棧很大,這個(gè)屬性有點(diǎn)多余.

            創(chuàng)建脫離線程:
            /*
             * 線程屬性-創(chuàng)建脫離線程
             * 主線程不等待子線程結(jié)束,只通過(guò)thread_finished標(biāo)志來(lái)檢測(cè)子線程是否已結(jié)束,并顯示線程之間仍然共享的變量.
             
            */
            #include 
            <stdio.h>
            #include 
            <unistd.h>
            #include 
            <stdlib.h>
            #include 
            <pthread.h>

            void *thread_function(void *arg);

            char g_message[] = "Hello World!";
            int g_thread_finished = 0;

            int main(){
                
            int res;
                pthread_t a_thread;
                pthread_attr_t thread_attr;

                res 
            = pthread_attr_init(&thread_attr);
                
            if(res != 0){
                    perror(
            "Attribute creation failed");
                    exit(EXIT_FAILURE);
                }

                res 
            = pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
                
            if(res != 0){
                    perror(
            "Setting detached attribute failed");
                    exit(EXIT_FAILURE);
                }

                res 
            = pthread_create(&a_thread, &thread_attr,
                        thread_function, (
            void *)g_message);
                
            if(res != 0){
                    perror(
            "Thread creation failed");
                    exit(EXIT_FAILURE);
                }

                (
            void)pthread_attr_destroy(&thread_attr);
                
            while(!g_thread_finished){
                    printf(
            "Waiting for thread to say it's finished\n");
                    sleep(
            1);
                }
                printf(
            "Other thread finished, bye!\n");
                exit(EXIT_SUCCESS);
            }

            void *thread_function(void *arg){
                printf(
            "thread_function is running. Argument was %s\n", (char *)arg);
                sleep(
            4);
                printf(
            "Second thread setting finished flag, and exit now\n");
                g_thread_finished 
            = 1;
                pthread_exit(NULL);
            }

            執(zhí)行結(jié)果:
            $ gcc -D_REENTRANT thread5.c -o thread5 -lpthread  
            $ .
            /thread5 
            Waiting 
            for thread to say it's finished
            thread_function is running. Argument was Hello World!
            Waiting 
            for thread to say it's finished
            Waiting for thread to say it's finished
            Waiting for thread to say it's finished
            Second thread setting finished flag, and exit now
            Other thread finished, bye
            !

            --
            FROM: Linux程序設(shè)計(jì)

            posted on 2011-06-14 18:56 小默 閱讀(2229) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Linux

            導(dǎo)航

            統(tǒng)計(jì)

            留言簿(13)

            隨筆分類(287)

            隨筆檔案(289)

            漏洞

            搜索

            積分與排名

            最新評(píng)論

            閱讀排行榜

            日韩AV毛片精品久久久| 久久青草国产手机看片福利盒子| 亚洲国产天堂久久久久久| 久久综合色区| 狠狠色噜噜色狠狠狠综合久久| 性欧美丰满熟妇XXXX性久久久 | 91精品国产91久久久久久蜜臀| 国产高清美女一级a毛片久久w| 久久久久女教师免费一区| 久久久久久精品无码人妻| 国产精品久久久久无码av| 国产福利电影一区二区三区久久久久成人精品综合 | 国内精品久久久久影院免费| 精品久久久久久无码中文字幕| 一级女性全黄久久生活片免费| 精品久久久久久亚洲精品| 久久精品无码av| 91视频国产91久久久| 久久国产精品一区| 久久精品国产亚洲AV电影| 性做久久久久久免费观看| 国产精品久久国产精品99盘 | 一本色道久久88综合日韩精品 | 久久综合丁香激情久久| 日本亚洲色大成网站WWW久久 | 久久se精品一区二区影院| 亚洲va久久久噜噜噜久久男同| 国产日韩久久免费影院| 久久亚洲AV成人无码电影| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 久久精品免费观看| 亚洲精品美女久久777777| 久久精品国产精品亚洲下载| 久久久无码一区二区三区| 亚洲精品NV久久久久久久久久| 99999久久久久久亚洲| 久久久久亚洲AV成人网人人网站| 国产亚洲精午夜久久久久久| 精品国产乱码久久久久久郑州公司| 久久婷婷五月综合成人D啪| 品成人欧美大片久久国产欧美...|