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

<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>
            欧美在线播放一区| 欧美成va人片在线观看| 久久精品欧洲| 性高湖久久久久久久久| 午夜精品福利一区二区三区av| 亚洲一区二区三区精品动漫| 亚洲影音先锋| 欧美一区二区大片| 久久久久国色av免费观看性色| 久久精品综合一区| 免费日韩一区二区| 日韩午夜中文字幕| 午夜伦理片一区| 免费在线欧美视频| 国产精品理论片在线观看| 激情懂色av一区av二区av| 亚洲精品美女在线观看| 亚洲欧美成人精品| 美国成人毛片| 一区二区三区欧美日韩| 久久不射中文字幕| 欧美国产精品一区| 国产精品专区第二| 亚洲精品久久久久久一区二区 | 亚洲私人影院在线观看| 久久精品99久久香蕉国产色戒| 久久久91精品国产| 欧美另类视频在线| 国产嫩草一区二区三区在线观看| 今天的高清视频免费播放成人| 亚洲日本免费电影| 午夜精品免费视频| 免费亚洲电影| 一区二区高清视频在线观看| 久久精品国产第一区二区三区| 欧美日本韩国| 亚洲电影下载| 欧美在线一二三| 亚洲日本电影在线| 99在线精品免费视频九九视| 欧美在线视频观看免费网站| 欧美日韩一区二区视频在线| 亚洲高清不卡在线| 久久久精品性| 亚洲欧美久久久久一区二区三区| 欧美成人精品在线观看| 国产一区香蕉久久| 午夜精品www| 亚洲免费观看在线观看| 久久精品视频在线看| 国产精品入口| 亚洲欧美日韩成人| 一本大道久久a久久精品综合| 久热精品在线| 亚洲第一页中文字幕| 久久免费高清| 欧美综合国产精品久久丁香| 国产精品呻吟| 午夜视频久久久| 亚洲一区二区高清视频| 欧美三级视频| 亚洲免费视频观看| 99精品免费网| 国产精品福利网| 亚洲欧美日韩电影| 亚洲男人的天堂在线观看| 国产精品久久久久久久久久免费看| 一道本一区二区| 亚洲免费av网站| 欧美天天综合网| 午夜精品久久久久久| 亚洲一区二区三区精品在线| 国产精品无码永久免费888| 香蕉久久精品日日躁夜夜躁| 亚洲综合三区| 国外成人免费视频| 男人的天堂亚洲| 欧美国产日韩一区二区三区| 亚洲精品一区二区三区婷婷月 | 国产精品久久中文| 亚洲欧美制服中文字幕| 亚洲欧美日韩精品久久久| 亚洲一区欧美二区| 亚洲午夜精品福利| 国产精品亚洲网站| 久久久久综合一区二区三区| 久久久噜噜噜久久中文字幕色伊伊 | 在线观看亚洲a| 欧美激情2020午夜免费观看| 欧美高清在线一区| 亚洲一区二区三区激情| 午夜亚洲精品| 亚洲国产精品传媒在线观看| 亚洲精品女av网站| 欧美日韩精品一区二区在线播放| 亚洲视频一二三| 欧美一二区视频| 亚洲人午夜精品| 亚洲一区二区精品在线| 在线观看欧美激情| 一区二区三区.www| 精品91免费| 一二三四社区欧美黄| 激情丁香综合| 亚洲欧美日产图| 亚洲乱码国产乱码精品精| 亚洲一二三四区| 91久久综合亚洲鲁鲁五月天| 亚洲一区999| 亚洲精品亚洲人成人网| 欧美在现视频| 亚洲你懂的在线视频| 免费久久99精品国产| 欧美一级二区| 欧美三级电影大全| 欧美韩国日本一区| 国产亚洲综合在线| 9久草视频在线视频精品| 激情综合网址| 亚洲欧美日韩在线一区| 一区二区三区黄色| 免费成人网www| 久久五月激情| 国产色产综合产在线视频| 日韩一级大片| 日韩视频一区二区| 蜜桃精品一区二区三区| 久久精品观看| 国产日韩一区二区三区在线| av72成人在线| 亚洲无毛电影| 欧美色大人视频| 日韩视频不卡中文| 日韩一区二区精品视频| 欧美11—12娇小xxxx| 牛牛影视久久网| 一区二区三区在线高清| 欧美一区午夜精品| 久久精品男女| 国产又爽又黄的激情精品视频| 亚洲欧美www| 久久激情婷婷| 久久福利精品| 国产精品国色综合久久| 一区二区三区四区在线| 亚洲一区在线观看视频| 欧美日韩三级在线| 一区二区三区高清| 翔田千里一区二区| 国产视频久久网| 久久精品夜色噜噜亚洲a∨| 久久夜色精品一区| 亚洲缚视频在线观看| 欧美精品播放| 一区二区三区精品视频| 欧美亚洲一区三区| 国产综合在线看| 免费一区二区三区| 99国内精品| 欧美自拍偷拍| 亚洲第一网站免费视频| 欧美人交a欧美精品| 亚洲色图在线视频| 久久亚洲高清| 99亚洲一区二区| 国产精品免费看片| 久久国产精品一区二区三区四区 | 久久www成人_看片免费不卡| 一区二区三区自拍| 欧美精品v日韩精品v韩国精品v | 久久免费高清视频| 一区在线免费| 欧美大色视频| 夜夜爽www精品| 卡一卡二国产精品| 一区二区欧美日韩| 国产亚洲二区| 欧美激情第一页xxx| 亚洲自拍另类| 欧美国产1区2区| 亚洲欧洲av一区二区| 亚洲高清资源| 国产精品一区二区男女羞羞无遮挡| 久久精品视频免费播放| 一本色道久久精品| 欧美成人69| 欧美永久精品| 这里只有精品在线播放| 伊人色综合久久天天五月婷| 欧美视频观看一区| 在线一区二区日韩| 欧美在线播放视频| 欧美国产精品久久| 香蕉尹人综合在线观看| 亚洲精品久久7777| 国产一区免费视频| 国产精品第一页第二页第三页| 久久网站免费| 亚洲欧美精品伊人久久| 亚洲精品一区二区三区在线观看 |