程序代碼test.c共兩個(gè)線程,一個(gè)主線程,一個(gè)讀緩存區(qū)的線程賣腔:
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的五華網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
#include pthread.h
#include stdio.h
#include stdlib.h
#include string.h
#include unistd.h
char globe_buffer[100];
void *read_buffer_thread(void *arg); //這里先聲明一下讀緩存的線中拆衫程,具體實(shí)現(xiàn)寫在后面了
int main()
{
int res,i;
pthread_t read_thread;
for(i=0;i20;i++)
globe_buffer[i]=i;
printf("\nTest thread : write buffer finish\n");
sleep(3);\\這里的3秒是多余,可以不要。
res = pthread_create(read_thread, NULL, read_buffer_thread, NULL);
if (res != 0)
{
printf("Read Thread creat Error!");
exit(0);
}
sleep(1);
printf("waiting for read thread to finish...\n");
res = pthread_join(read_thread, NULL);
if (res != 0)
{
printf("read thread join failed!\n");
exit(0);
}
printf("read thread test OK, have fun!! exit ByeBye\n");
return 0;
}
void *read_buffer_thread(void *arg)
{
int i,x;
printf("Read buffer thread read data : \n");
for(i=0;i20;i++)
{
x=globe_buffer[i];
printf("%d ",x);
globe_buffer[i]=0;//清空
}
printf("\nread over\n");
}
---------------------------------------------------------------------------------
以上程御畢序編譯:
gcc -D_REENTRANT test.c -o test.o –lpthread
運(yùn)行這個(gè)程序:
$ ./test.o:
pthread_join 線程停止等待函數(shù)沒有調(diào)用
pthread_create 線程生成后,沒有等子線程停止,敗信主線程就先停止了。
主線程停止悉桐后,整個(gè)程序停止,子線程在沒有printf的時(shí)候就被結(jié)束了。
結(jié)論:不是你沒有看到結(jié)果,而是在子線程printf("..................\n");之前整個(gè)程序就已經(jīng)停止了。
#include stdio.h
#include stdlib.h察陸輪
#include sys/types.h
#include string.h
#include unistd.h
#include pthread.h
#define FALSE -1
#define TRUE 0
void *shuchu( void *dumy )
{
int j;
printf("..................\n");
}
int main()
{
int i = 0;
int rc = 0;
int ret1;
pthread_t p_thread1;
if(0!=(ret1 = pthread_create(p_thread1, NULL, shuchu, NULL)))printf("sfdfsdfi\n");
printf("[%d]\n",p_thread1);
pthread_join(p_thread1, NULL);
return TRUE;
}
你編余李譯的時(shí)候有加多線程連接選項(xiàng)嗎? 要加廳毀慧上 -lpthread 或者 -pthread (盡量選后者)
例如 gcc -pthread -o test main.cpp
另外你的線程創(chuàng)建的不對(duì),函扮答數(shù)指針不能強(qiáng)轉(zhuǎn)類型(這里也不用轉(zhuǎn))
pthread_create(producter_t,NULL,(void*)producter_f,NULL);
pthread_create(consumer_t,NULL,(void*)consumer_f,NULL);
應(yīng)該是
pthread_create(producter_t,NULL,producter_f,NULL);
pthread_create(consumer_t,NULL,consumer_f,NULL);
C語言要求除main函數(shù)外 所有的函數(shù)必須先聲明才能使用 你可以在函數(shù)定義的時(shí)候一起聲明這個(gè)函數(shù) 但是在這個(gè)函數(shù)定義之前不能使用這個(gè)函瞎沒數(shù)
下面用通俗點(diǎn)的語言講: 你在main函數(shù)中調(diào)用了thread函數(shù), 但是如果你把void *thread(void *vargp);刪掉了, 那么編譯器就找不到這個(gè)函數(shù)了(因?yàn)榫幾g器是從前往后編譯這個(gè)程序的) 因此編譯器是通不過的
有兩種方法, 一種就是像你之前寫的 先聲明這個(gè)函數(shù) 第二種是把void *thread(void *vargp){...}放到main函數(shù)的前面.
有些返回值和參數(shù)類磨乎納型為int型的函數(shù)頃嫌也可以不用聲明, 編譯器也能通過, 不過這是不建議的 也是不符合標(biāo)準(zhǔn)的
標(biāo)準(zhǔn)建議每個(gè)函數(shù)都應(yīng)該給出它們的顯式的聲明
希望你懂了 嘿嘿
當(dāng)前名稱:linux編譯多線程命令 linux多線程程序設(shè)計(jì)
瀏覽路徑:http://m.newbst.com/article12/ddpopgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站導(dǎo)航、網(wǎng)站收錄、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)