青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

<2006年8月>
303112345
6789101112
13141516171819
20212223242526
272829303112
3456789

統計

  • 隨筆 - 44
  • 文章 - 0
  • 評論 - 86
  • 引用 - 0

常用鏈接

留言簿(6)

隨筆分類(31)

隨筆檔案(44)

Mining

最新隨筆

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

Linux C編程 - 線程

Linux 系統下的多線程遵循POSIX線程接口,稱為pthread。編寫Linux下的多線程程序,需要使用頭文件pthread.h,連接時需要使用庫 libpthread.a。

1. 線程的創建和使用
線程的創建是用下面的幾個函數來實現的.

int ?pthread_create(pthread_t? * thread,pthread_attr_t? * attr,? void ? * ( * start_routine)( void ? * ), void ? * arg);
void ?pthread_exit( void ? * retval);
int ?pthread_join(pthread? * thread, void ? ** thread_return);

pthread_create創建一個線程,thread是用來表明創建線程的ID,attr指出線程創建時候的屬性,我們用NULL來表明使用缺省屬性.start_routine函數指針是線程創建成功后開始執行的函數,arg是這個函數的唯一一個參數.表明傳遞給start_routine 的參數.
pthread_exit函數和exit函數類似用來退出線程.這個函數結束線程,釋放函數的資源,并在最后阻塞,直到其他線程使用
pthread_join函數等待它.然后將*retval的值傳遞給**thread_return.由于這個函數釋放所以的函數資源,所以 retval不能夠指向函數的局部變量.
pthread_join和wait調用一樣用來等待指定的線程.

下面展示一個最簡單的多線程程序。

#include? < stdio.h >
#include?
< pthread.h >
void ?thread( void )
{
?
int ?i;
?
for (i = 0 ;i < 3 ;i ++ )
?printf(
" This?is?a?pthread.\n " );
}

int ?main( void )
{
?pthread_t?id;
?
int ?i,ret;
?ret
= pthread_create( & id,NULL,( void ? * )?thread,NULL);
?
if (ret != 0 )
?{
??printf?(
" Create?pthread?error!\n " );
??exit?(
1 );
?}
?
for (i = 0 ;i < 3 ;i ++ )
??printf(
" This?is?the?main?process.\n " );
?pthread_join(id,NULL);
?
return ?( 0 );
}

2. 修改線程的屬性
上面用pthread_create函數創建了一個線程,在這個線程中,我們使用了默認參數,即將該函數的第二個參數設為NULL。屬性結構為pthread_attr_t,它同樣在頭文件/usr/include/pthread.h中定義。屬性值不能直接設置,須使用相關函數進行操作,初始化的函數為pthread_attr_init,這個函數必須在pthread_create函數之前調用。屬性對象主要包括是否綁定、是否分離、堆棧地址、堆棧大小、優先級。默認的屬性為非綁定、非分離、缺省1M的堆棧、與父進程同樣級別的優先級。

關于線程的綁定,牽涉到另外一個概念:輕進程(LWP:Light Weight Process)。輕進程可以理解為內核線程,它位于用戶層和系統層之間。系統對線程資源的分配、對線程的控制是通過輕進程來實現的,一個輕進程可以控制一個或多個線程。默認狀況下,啟動多少輕進程、哪些輕進程來控制哪些線程是由系統來控制的,這種狀況即稱為非綁定的。綁定狀況下,則顧名思義,即某個線程固定的"綁"在一個輕進程之上。被綁定的線程具有較高的響應速度,這是因為CPU時間片的調度是面向輕進程的,綁定的線程可以保證在需要的時候它總有一個輕進程可用。通過設置被綁定的輕進程的優先級和調度級可以使得綁定的線程滿足諸如實時反應之類的要求。
設置線程綁定狀態的函數為pthread_attr_setscope,它有兩個參數,第一個是指向屬性結構的指針,第二個是綁定類型,它有兩個取值:PTHREAD_SCOPE_SYSTEM(綁定的)和PTHREAD_SCOPE_PROCESS(非綁定的)。下面的代碼即創建了一個綁定的線程。

#include? < pthread.h >
pthread_attr_t?attr;
pthread_t?tid;

/* 初始化屬性值,均設為默認值 */
pthread_attr_init(
& attr);
pthread_attr_setscope(
& attr,?PTHREAD_SCOPE_SYSTEM);
pthread_create(
& tid,? & attr,?( void ? * )?my_function,?NULL);

線程的分離狀態決定一個線程以什么樣的方式來終止自己。在上面的例子中,我們采用了線程的默認屬性,即為非分離狀態,這種情況下,原有的線程等待創建的線程結束。只有當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返回。設置一段等待時間,是在多線程編程里常用的方法。但是注意不要使用諸如wait()之類的函數,它們是使整個進程睡眠,并不能解決線程同步的問題。


另外一個可能常用的屬性是線程的優先級,它存放在結構sched_param中。用函數pthread_attr_getschedparam和函數 pthread_attr_setschedparam進行存放,一般說來,我們總是先取優先級,對取得的值修改后再存放回去。下面即是一段簡單的例子。

#include? < pthread.h >
#include?
< sched.h >
pthread_attr_t?attr;
pthread_t?tid;
sched_param?param;
int ?newprio = 20 ;

pthread_attr_init(
& attr);
pthread_attr_getschedparam(
& attr,? & param);
param.sched_priority
= newprio;
pthread_attr_setschedparam(
& attr,? & param);
pthread_create(
& tid,? & attr,?( void ? * )myfunction,?myarg);

[參考]
http://fanqiang.chinaunix.net/a4/b2/20010508/113838.html
http://fanqiang.chinaunix.net/a4/b8/20010811/0905001105.html

posted on 2006-08-04 18:46 泡泡牛 閱讀(1091) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国模大胆一区二区三区| 亚洲人成网站精品片在线观看| 亚洲福利视频三区| 免费av成人在线| 亚洲大片在线| 91久久午夜| 欧美香蕉视频| 久久久水蜜桃| 免费成人av| 一二美女精品欧洲| 在线亚洲+欧美+日本专区| 国产精品久久久久aaaa| 久久黄金**| 午夜亚洲性色视频| 亚洲精品社区| 99re热这里只有精品视频| 国产精品日本精品| 老司机午夜精品| 欧美精品色网| 先锋影音久久| 麻豆精品91| 亚洲午夜激情| 欧美中文字幕在线| 一区二区高清视频| 性色av一区二区三区在线观看| 亚洲国产第一| 亚洲视频中文字幕| 亚洲电影观看| 亚洲欧美高清| 亚洲精品一级| 欧美一区二区三区啪啪| 中文精品在线| 久久这里有精品15一区二区三区| 亚洲视频综合在线| 久久视频在线视频| 亚洲免费在线观看| 免费欧美日韩| 久久久久久久尹人综合网亚洲 | 中国亚洲黄色| 久久精品国产久精国产一老狼| 99亚洲一区二区| 久久精品国产精品亚洲精品| 亚洲一区二区三区在线| 免费观看欧美在线视频的网站| 亚洲欧洲av一区二区| 牛牛国产精品| 久久免费黄色| 国产欧美一区二区三区沐欲| 日韩视频一区二区三区| 91久久中文| 久久精品91| 久久se精品一区二区| 欧美视频官网| 亚洲美女诱惑| 一本到12不卡视频在线dvd| 久久久久久高潮国产精品视| 久久av资源网| 国产麻豆一精品一av一免费| 一本到12不卡视频在线dvd| 亚洲精品一区二区三区在线观看| 久久精品国产v日韩v亚洲| 欧美在线国产| 国产伦精品一区二区三区免费迷| 亚洲特级片在线| 午夜精品福利一区二区三区av| 欧美人交a欧美精品| 亚洲精品你懂的| 精品福利电影| 久久综合久久综合这里只有精品| 老**午夜毛片一区二区三区| 精品不卡在线| 免费欧美视频| 亚洲国产精品成人综合| 日韩天堂在线视频| 欧美日韩精品免费| 一区二区三区精品| 欧美一级在线播放| 国产亚洲精品一区二区| 久久婷婷国产综合尤物精品| 亚洲一级在线观看| 欧美一区久久| 伊人精品成人久久综合软件| 久久九九99| 亚洲国产成人精品女人久久久| 亚洲片在线观看| 欧美四级在线| 午夜一区二区三区在线观看| 老巨人导航500精品| 亚洲日本激情| 国产精品久久二区二区| 性做久久久久久免费观看欧美| 老司机aⅴ在线精品导航| 亚洲欧洲日本在线| 国产精品久久毛片a| 欧美一级欧美一级在线播放| 欧美福利电影在线观看| 制服丝袜亚洲播放| 国模套图日韩精品一区二区| 久久影音先锋| 亚洲亚洲精品在线观看| 免费人成网站在线观看欧美高清| 日韩一级片网址| 国产在线精品成人一区二区三区| 另类国产ts人妖高潮视频| 一区二区三区四区五区在线| 久久久久久伊人| 在线亚洲免费视频| 在线精品国产欧美| 欧美色视频一区| 久久精品成人一区二区三区| 亚洲人成在线观看| 久久人人超碰| 亚洲影音先锋| 亚洲精品国久久99热| 国产亚洲第一区| 欧美母乳在线| 老司机一区二区三区| 新狼窝色av性久久久久久| 欧美大片va欧美在线播放| 香蕉成人久久| 一本色道久久综合亚洲精品婷婷 | 午夜精品久久久久久久男人的天堂| 久久综合久久久久88| 亚洲视频欧洲视频| 亚洲国产成人午夜在线一区| 国产日韩在线播放| 国产精品高精视频免费| 久久久久久综合网天天| 午夜精品久久久久久久99水蜜桃| 亚洲精品视频中文字幕| 蜜桃av综合| 久久躁狠狠躁夜夜爽| 久久精品一二三区| 欧美在线视频日韩| 亚洲一区国产| 一区二区三区色| 99国产精品自拍| 日韩视频在线一区| 亚洲国产女人aaa毛片在线| 国产综合婷婷| 国产一区视频在线看| 国产日韩高清一区二区三区在线| 国产精品久久久久久久一区探花| 欧美日韩岛国| 欧美精品福利| 欧美精品xxxxbbbb| 欧美视频在线播放| 欧美日韩在线播| 欧美人与性动交cc0o| 欧美日韩国产一区精品一区 | 亚洲女同同性videoxma| 久久久99久久精品女同性| 国产一区二区精品久久| 国产午夜精品一区二区三区视频 | 亚洲一区二区三区久久| 亚洲视频在线播放| 亚洲素人一区二区| 午夜精品理论片| 欧美一二三视频| 久久性天堂网| 欧美精品电影在线| 国产精品私人影院| 国产亚洲欧美一区二区三区| 精品51国产黑色丝袜高跟鞋| 亚洲高清不卡一区| 一本色道88久久加勒比精品 | 国内久久婷婷综合| 亚洲高清视频一区二区| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲欧洲精品成人久久奇米网| 亚洲高清精品中出| 一区二区三区日韩| 欧美影院成人| 欧美福利精品| 亚洲一二三四区| 久久蜜臀精品av| 欧美三级网页| 极品中文字幕一区| 在线亚洲国产精品网站| 久久久久国产一区二区| 欧美午夜免费| 亚洲一级特黄| 男男成人高潮片免费网站| 欧美日韩一区国产| 好吊一区二区三区| 在线综合视频| 欧美成人久久| 亚洲影院在线观看| 欧美国产日韩一区二区三区| 国产精品中文字幕欧美| 亚洲精品少妇30p| 久久久久久伊人| 99精品视频免费观看视频| 久久视频在线视频| 国产区二精品视| 亚洲一区二区三| 亚洲国产99| 久久精品一区二区三区不卡| 一本久久青青| 亚洲国产老妈|