• <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>

            不會飛的鳥

            2010年12月10日 ... 不鳥他們!!! 我要用自己開發(fā)的分布式文件系統(tǒng)、分布式調(diào)度系統(tǒng)、分布式檢索系統(tǒng), 做自己的搜索引擎!!!大魚有大志!!! ---楊書童

            多線程-條件變量屬性

            使用條件變量可以以原子方式阻塞線程,直到某個特定條件為真為止。條件變量始終與互斥鎖一起使用。

            使用條件變量,線程可以以原子方式阻塞,直到滿足某個條件為止。對條件的測試是在互斥鎖(互斥)的保護下進行的。

            如果條件為假,線程通常會基于條件變量阻塞,并以原子方式釋放等待條件變化的互斥鎖。如果另一個線程更改了條件,該線程可能會向相關(guān)的條件變量發(fā)出信號,從而使一個或多個等待的線程執(zhí)行以下操作:

            • 喚醒

            • 再次獲取互斥鎖

            • 重新評估條件

            在以下情況下,條件變量可用于在進程之間同步線程:

            • 線程是在可以寫入的內(nèi)存中分配的

            • 內(nèi)存由協(xié)作進程共享

            調(diào)度策略可確定喚醒阻塞線程的方式。對于缺省值 SCHED_OTHER,將按優(yōu)先級順序喚醒線程。

            必須設(shè)置和初始化條件變量的屬性,然后才能使用條件變量。表 4–4 列出了用于處理條件變量屬性的函數(shù)。

            表 4–4 條件變量屬性

            操作

            函數(shù)說明

            初始化條件變量屬性

            pthread_condattr_init 語法

            刪除條件變量屬性

            pthread_condattr_destroy 語法

            設(shè)置條件變量的范圍

            pthread_condattr_setpshared 語法

            獲取條件變量的范圍

            pthread_condattr_getpshared 語法

             

            表 4–5 中顯示了定義條件變量的范圍時 Solaris 線程和 POSIX 線程之間的差異。

            表 4–5 條件變量范圍比較

            Solaris

            POSIX

            定義

            USYNC_PROCESS

            PTHREAD_PROCESS_SHARED

            用于同步該進程和其他進程中的線程

            USYNC_THREAD

            PTHREAD_PROCESS_PRIVATE

            用于僅同步該進程中的線程

             

            初始化條件變量屬性

            使用 pthread_condattr_init(3C) 可以將與該對象相關(guān)聯(lián)的屬性初始化為其缺省值。在執(zhí)行過程中,線程系統(tǒng)會為每個屬性對象分配存儲空間。

            pthread_condattr_init 語法

            int	pthread_condattr_init(pthread_condattr_t *cattr);
            #include <pthread.h>
            pthread_condattr_t cattr;
            int ret;
            /* initialize an attribute to default value */
            ret = pthread_condattr_init(&cattr); 

            調(diào)用此函數(shù)時,pshared 屬性的缺省值為 PTHREAD_PROCESS_PRIVATEpshared 的該值表示可以在進程內(nèi)使用已初始化的條件變量。

            cattr 的數(shù)據(jù)類型為 opaque,其中包含一個由系統(tǒng)分配的屬性對象。cattr 范圍可能的值為 PTHREAD_PROCESS_PRIVATEPTHREAD_PROCESS_SHAREDPTHREAD_PROCESS_PRIVATE 是缺省值。

            條件變量屬性必須首先由 pthread_condattr_destroy(3C) 重新初始化后才能重用。pthread_condattr_init() 調(diào)用會返回指向類型為 opaque 的對象的指針。如果未銷毀該對象,則會導(dǎo)致內(nèi)存泄漏。

            pthread_condattr_init 返回值

            pthread_condattr_init() 在成功完成之后會返回零。其他任何返回值都表示出現(xiàn)了錯誤。如果出現(xiàn)以下任一情況,該函數(shù)將失敗并返回對應(yīng)的值。

            ENOMEM

            描述:

            分配的內(nèi)存不足,無法初始化線程屬性對象。

            EINVAL

            描述:

            cattr 指定的值無效。

            刪除條件變量屬性

            使用 pthread_condattr_destroy(3C) 可以刪除存儲并使屬性對象無效。

            pthread_condattr_destroy 語法

            int	pthread_condattr_destroy(pthread_condattr_t *cattr);
            #include <pthread.h>
            pthread_condattr_t cattr;
            int ret;
            /* destroy an attribute */
            ret
            = pthread_condattr_destroy(&cattr); 

            pthread_condattr_destroy 返回值

            pthread_condattr_destroy() 在成功完成之后會返回零。其他任何返回值都表示出現(xiàn)了錯誤。如果出現(xiàn)以下情況,該函數(shù)將失敗并返回對應(yīng)的值。

            EINVAL

            描述:

            cattr 指定的值無效。

            設(shè)置條件變量的范圍

            pthread_condattr_setpshared(3C) 可用來將條件變量的范圍設(shè)置為進程專用(進程內(nèi))或系統(tǒng)范圍內(nèi)(進程間)。

            pthread_condattr_setpshared 語法

            int	pthread_condattr_setpshared(pthread_condattr_t *cattr,
            int pshared);
            #include <pthread.h>
            pthread_condattr_t cattr;
            int ret;
            /* all processes */
            ret = pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_SHARED);
            /* within a process */
            ret = pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_PRIVATE);

            如果 pshared 屬性在共享內(nèi)存中設(shè)置為 PTHREAD_PROCESS_SHARED,則其所創(chuàng)建的條件變量可以在多個進程中的線程之間共享。此行為與最初的 Solaris 線程實現(xiàn)中 mutex_init() 中的 USYNC_PROCESS 標(biāo)志等效。

            如果互斥鎖的 pshared 屬性設(shè)置為 PTHREAD_PROCESS_PRIVATE,則僅有那些由同一個進程創(chuàng)建的線程才能夠處理該互斥鎖。PTHREAD_PROCESS_PRIVATE 是缺省值。PTHREAD_PROCESS_PRIVATE 所產(chǎn)生的行為與在最初的 Solaris 線程的 cond_init() 調(diào)用中使用 USYNC_THREAD 標(biāo)志相同。PTHREAD_PROCESS_PRIVATE 的行為與局部條件變量相同。PTHREAD_PROCESS_SHARED 的行為與全局條件變量等效。

            pthread_condattr_setpshared 返回值

            pthread_condattr_setpshared() 在成功完成之后會返回零。其他任何返回值都表示出現(xiàn)了錯誤。如果出現(xiàn)以下情況,該函數(shù)將失敗并返回對應(yīng)的值。

            EINVAL

            描述:

            cattrpshared 的值無效。

            獲取條件變量的范圍

            pthread_condattr_getpshared(3C) 可用來獲取屬性對象 cattrpshared 的當(dāng)前值。

            pthread_condattr_getpshared 語法

            int	pthread_condattr_getpshared(const pthread_condattr_t *cattr,
            int *pshared);
            #include <pthread.h>
            pthread_condattr_t cattr;
            int pshared;
            int ret;
            /* get pshared value of condition variable */
            ret = pthread_condattr_getpshared(&cattr, &pshared); 

            屬性對象的值為 PTHREAD_PROCESS_SHAREDPTHREAD_PROCESS_PRIVATE

            pthread_condattr_getpshared 返回值

            pthread_condattr_getpshared() 在成功完成之后會返回零。其他任何返回值都表示出現(xiàn)了錯誤。如果出現(xiàn)以下情況,該函數(shù)將失敗并返回對應(yīng)的值。

            EINVAL

            描述:

            cattr 的值無效。

            posted on 2009-01-12 13:55 不會飛的鳥 閱讀(953) 評論(0)  編輯 收藏 引用


            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产色综合久久无码有码| 97久久天天综合色天天综合色hd| 97精品伊人久久久大香线蕉| 四虎国产精品免费久久5151| 久久精品国产精品亚洲下载| 四虎影视久久久免费观看| 一本一本久久a久久综合精品蜜桃| 久久久国产乱子伦精品作者| 秋霞久久国产精品电影院| 最新久久免费视频| 久久精品国产亚洲AV电影| 国产视频久久| 国产三级久久久精品麻豆三级| 久久se这里只有精品| 伊人久久大香线蕉综合网站| 亚洲一本综合久久| 国产毛片欧美毛片久久久| 久久久精品久久久久久| 久久久久亚洲AV无码专区体验| 日日狠狠久久偷偷色综合0| 精品熟女少妇av免费久久| 久久综合九色综合网站| 色8久久人人97超碰香蕉987| 精品久久久久中文字| 国产精品久久久久影院色| 国内精品综合久久久40p| 久久久久亚洲精品无码网址 | 久久精品国产91久久麻豆自制| 人妻无码精品久久亚瑟影视 | 久久久国产乱子伦精品作者| 亚洲精品乱码久久久久久蜜桃| 色综合合久久天天综合绕视看| 久久青青草原亚洲av无码app| 久久天天躁夜夜躁狠狠| 亚洲精品乱码久久久久久蜜桃| 青青久久精品国产免费看| 亚洲国产精品嫩草影院久久 | 97精品国产97久久久久久免费| 国产午夜精品理论片久久| 久久996热精品xxxx| 国产精自产拍久久久久久蜜|