c語言線程終止函數(shù) 線程終止調(diào)用什么方法

C語言線程如何終止?

有三種方式可以終止線程,具體調(diào)用函數(shù)依賴于使用的線程系統(tǒng)。

公司主營業(yè)務(wù):成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出景洪免費做網(wǎng)站回饋大家。

1 在線程入口函數(shù)中,調(diào)用return。 即退出線程入口函數(shù),可以實現(xiàn)終止當(dāng)前線程效果;

2 在線程執(zhí)行的任意函數(shù),調(diào)用當(dāng)前線程退出函數(shù),可以退出當(dāng)前線程;

3 在任意位置,調(diào)用線程終止函數(shù),并傳入要終止線程的標(biāo)識符,即pid,可以實現(xiàn)終止對應(yīng)線程效果。

C語言如何終止線程?

面只有兩個線程,是生產(chǎn)者/消費者模式,已編譯通過,注釋很詳細(xì)。

/* 以生產(chǎn)者和消費者模型問題來闡述Linux線程的控制和通信你

生產(chǎn)者線程將生產(chǎn)的產(chǎn)品送入緩沖區(qū),消費者線程則從中取出產(chǎn)品。

緩沖區(qū)有N個,是一個環(huán)形的緩沖池。

*/

#include stdio.h

#include pthread.h

#define BUFFER_SIZE 16

struct prodcons

{

int buffer[BUFFER_SIZE];/*實際存放數(shù)據(jù)的數(shù)組*/

pthread_mutex_t lock;/*互斥體lock,用于對緩沖區(qū)的互斥操作*/

int readpos,writepos; /*讀寫指針*/

pthread_cond_t notempty;/*緩沖區(qū)非空的條件變量*/

pthread_cond_t notfull;/*緩沖區(qū)未滿 的條件變量*/

};

/*初始化緩沖區(qū)*/

void pthread_init( struct prodcons *p)

{

pthread_mutex_init(p-lock,NULL);

pthread_cond_init(p-notempty,NULL);

pthread_cond_init(p-notfull,NULL);

p-readpos = 0;

p-writepos = 0;

}

/*將產(chǎn)品放入緩沖區(qū),這里是存入一個整數(shù)*/

void put(struct prodcons *p,int data)

{

pthread_mutex_lock(p-lock);

/*等待緩沖區(qū)未滿*/

if((p-writepos +1)%BUFFER_SIZE ==p-readpos)

{

pthread_cond_wait(p-notfull,p-lock);

}

p-buffer[p-writepos] =data;

p-writepos++;

if(p-writepos = BUFFER_SIZE)

p-writepos = 0;

pthread_cond_signal(p-notempty);

pthread_mutex_unlock(p-lock);

}

/*從緩沖區(qū)取出整數(shù)*/

int get(struct prodcons *p)

{

int data;

pthread_mutex_lock(p-lock);

/*等待緩沖區(qū)非空*/

if(p-writepos == p-readpos)

{

pthread_cond_wait(p-notempty ,p-lock);//非空就設(shè)置條件變量notempty

}

/*讀書據(jù),移動讀指針*/

data = p-buffer[p-readpos];

p-readpos++;

if(p-readpos == BUFFER_SIZE)

p-readpos = 0;

/*設(shè)置緩沖區(qū)未滿的條件變量*/

pthread_cond_signal(p-notfull);

pthread_mutex_unlock(p-lock);

return data;

}

/*測試:生產(chǎn)站線程將1 到1000的整數(shù)送入緩沖區(qū),消費者線程從緩沖區(qū)中獲取整數(shù),兩者都打印信息*/

#define OVER (-1)

struct prodcons buffer;

void *producer(void *data)

{

int n;

for( n=0;n1000;n++)

{

printf("%d ------\n",n);

put(buffer,n);

}

put(buffer,OVER);

return NULL;

}

void *consumer(void *data)

{

int d;

while(1)

{

d = get(buffer);

if(d == OVER)

break;

else

printf("-----%d\n",d);

}

return NULL;

}

int main()

{

pthread_t th_p,th_c;

void *retval;

pthread_init(buffer);

pthread_create(th_p,NULL,producer,0);

pthread_create(th_c,NULL,consumer,0);

/*等待兩個線程結(jié)束*/

pthread_join(th_p, retval);

pthread_join(th_c,retval);

return 0;

}

C語言如何終止線程

有三種方式可以終止線程,具體調(diào)用函數(shù)依賴于使用的線程系統(tǒng)。

1 在線程入口函數(shù)中,調(diào)用return。 即退出線程入口函數(shù),可以實現(xiàn)終止當(dāng)前線程效果;

2 在線程執(zhí)行的任意函數(shù),調(diào)用當(dāng)前線程退出函數(shù),可以退出當(dāng)前線程;

3 在任意位置,調(diào)用線程終止函數(shù),并傳入要終止線程的標(biāo)識符,即pid,可以實現(xiàn)終止對應(yīng)線程效果。

C語言中exit();怎么用?

exit() 結(jié)束當(dāng)前進(jìn)程/當(dāng)前程序/,在整個程序中,只要調(diào)用 exit ,就結(jié)束。

return() 是當(dāng)前函數(shù)返回,當(dāng)然如果是在主函數(shù)main, 自然也就結(jié)束當(dāng)前進(jìn)程了,如果不是,那就是退回上一層調(diào)用。

在多個進(jìn)程時.如果有時要檢測上進(jìn)程是否正常退出的.就要用到上個進(jìn)程的返回值。

exit(1)表示進(jìn)程正常退出. 返回 1;

exit(0)表示進(jìn)程非正常退出. 返回 0.

操作:

1、進(jìn)程的開始:

C程序是從main函數(shù)開始執(zhí)行, 原型如下:int main(int argc, char *argv[]),通常main的返回值是int型, 正確返回0.如果main的返回值為void或者無, 某些編譯器會給出警告, 此時main的返回值通常是0.

2、進(jìn)程終止:

C程序的終止分為兩種: 正常終止和異常終止.正常終止分為: return, exit, _exit, _Exit, pthreade_exit異常中指分為: abort, SIGNAL, 線程響應(yīng)取消。正常終止的前4種, 即exit系列函數(shù).

3、 atexit終止處理程序:

ISO C規(guī)定, 一個進(jìn)程最對可登記32個終止處理函數(shù), 這些函數(shù)由exit按登記相反的順序自動調(diào)用. 如果同一函數(shù)登記多次, 也會被調(diào)用多次.

原型如下:

#include

int atexit(void (*func)(void));

其中參數(shù)是一個函數(shù)指針, 指向終止處理函數(shù), 該函數(shù)無參無返回值.

擴展資料

exit函數(shù)和return函數(shù)的主要區(qū)別:

1)exit用于在程序運行的過程中隨時結(jié)束程序,exit的參數(shù)是返回給OS的。main函數(shù)結(jié)束時也會隱式地調(diào)用exit函數(shù)。

exit函數(shù)運行時首先會執(zhí)行由atexit()函數(shù)登記的函數(shù),然后會做一些自身的清理工作,同時刷新所有輸出流、關(guān)閉所有打開的流并且關(guān)閉通過標(biāo)準(zhǔn)I/O函數(shù)tmpfile()創(chuàng)建的臨時文件。

exit是結(jié)束一個進(jìn)程,它將刪除進(jìn)程使用的內(nèi)存空間,同時把錯誤信息返回父進(jìn)程;而return是返回函數(shù)值并退出函數(shù)。

通常情況:exit(0)表示程序正常, exit(1)和exit(-1)表示程序異常退出,exit(2)表示表示系統(tǒng)找不到指定的文件。在整個程序中,只要調(diào)用exit就結(jié)束(當(dāng)前進(jìn)程或者在main時候為整個程序)。

2)return是語言級別的,它表示了調(diào)用堆棧的返回;return( )是當(dāng)前函數(shù)返回,當(dāng)然如果是在主函數(shù)main, 自然也就結(jié)束當(dāng)前進(jìn)程了,如果不是,那就是退回上一層調(diào)用。

在多個進(jìn)程時。如果有時要檢測上個進(jìn)程是否正常退出。就要用到上個進(jìn)程的返回值,依次類推。而exit是系統(tǒng)調(diào)用級別的,它表示了一個進(jìn)程的結(jié)束。

3)exit函數(shù)是退出應(yīng)用程序,并將應(yīng)用程序的一個狀態(tài)返回給OS,這個狀態(tài)標(biāo)識了應(yīng)用程序的一些運行信息。

名稱欄目:c語言線程終止函數(shù) 線程終止調(diào)用什么方法
本文路徑:http://muchs.cn/article36/doshppg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、商城網(wǎng)站網(wǎng)站營銷、搜索引擎優(yōu)化企業(yè)網(wǎng)站制作、手機網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作