導航:首頁 > 操作系統 > linux多線程編譯

linux多線程編譯

發布時間:2023-07-12 18:00:19

linux裡面線程編譯運行問題

#gcc a.c -o a #此句的-o a說明輸出目標文件為「a」;
#gcc -Wall-lpthread threadcreatetest.c #此句未註明輸出目標文件名,系統默認輸出為a.out,所以編譯之後執行./a.out文件。
如果上句也沒有指明「 -o a 」的話,輸出也是a.out,你可以試試

㈡ LINUX下多線程編譯問題

你編譯的時候有加多線程連接選項嗎? 要加上 -lpthread 或者 -pthread (盡量選後者)
例如 gcc -pthread -o test main.cpp

另外你的線程創建的不對,函數指針不能強轉類型(這里也不用轉)
pthread_create(&procter_t,NULL,(void*)procter_f,NULL);
pthread_create(&consumer_t,NULL,(void*)consumer_f,NULL);

應該是
pthread_create(&procter_t,NULL,procter_f,NULL);
pthread_create(&consumer_t,NULL,consumer_f,NULL);

㈢ 關於linux下多線程編程

pthread_join 線程停止等待函數沒有調用

pthread_create 線程生成後,沒有等子線程停止,主線程就先停止了。

主線程停止後,整個程序停止,子線程在沒有printf的時候就被結束了。

結論:不是你沒有看到結果,而是在子線程printf("..................\n");之前整個程序就已經停止了。

#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 *my )
{
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;

}

㈣ Linux下如何實現shell多線程編程以提高應用程序的響應

Linux中多線程編程擁有提高應用程序的響應、使多cpu系統更加有效等優點,下面小編將通過Linux下shell多線程編程的例子給大家講解下多線程編程的過程,一起來了解下吧。

#!/bin/bash

#———————————————————————————–

# 此例子說明了一種用wait、read命令模擬多線程的一種技巧

# 此技巧往往用於多主機檢查,比如ssh登錄、ping等等這種單進程比較慢而不耗費cpu的情況

# 還說明了多線程的控制

#———————————————————————————–

function a_sub

{

# 此處定義一個函數,作為一個線程(子進程)

sleep 3 # 線程的作用是sleep 3s

}

tmp_fifofile=「/tmp/$.fifo」 mkfifo $tmp_fifofile # 新建一個fifo類型的文件

exec 6《》$tmp_fifofile # 將fd6指向fifo類型

rm $tmp_fifofile thread=15 # 此處定義線程數

for

((i=0;i《$thread;i++));do echo

done 》&6 # 事實上就是在fd6中放置了$thread個回車符

for

((i=0;i《50;i++));do # 50次循環,可以理解為50個主機,或其他

read -u6 # 一個read -u6命令執行一次,就從fd6中減去一個回車符,然後向下執行,

# fd6中沒有回車符的時候,就停在這了,從而實現了線程數量控制

{ # 此處子進程開始執行,被放到後台

a_sub &&

{ # 此處可以用來判斷子進程的邏輯

echo 「a_sub is finished」

}

||

{ echo 「sub error」

}

echo 》&6 # 當進程結束以後,再向fd6中加上一個回車符,即補上了read -u6減去的那個

}

& done wait # 等待所有的後檯子進程結束

exec 6》&- # 關閉df6 exit 0

說明:

此程序中的命令

mkfifo tmpfile

和linux中的命令

mknod tmpfile p

效?果相同。區別是mkfifo為POSIX標准,因此推薦使用它。該命令創建了一個先入先出的管道文件,並為其分配文件標志符6。管道文件是進程之間通信的一種方式,注意這一句很重要

exec 6《》$tmp_fifofile # 將fd6指向fifo類型

如果沒有這句,在向文件$tmp_fifofile或者&6寫入數據時,程序會被阻塞,直到有read讀出了管道文件中的數據為止。而執行了上面這一句後就可以在程序運行期間不斷向fifo類型的文件寫入數據而不會阻塞,並且數據會被保存下來以供read程序讀出。

通過運行命令:

time 。/multithread.sh 》/dev/null

最終運算時間: 50/15 = 3組(每組15)+1組(5個《15 組成一個組)= 4組,每組花費時間:3秒,

則 3 * 4 = 12 秒。

傳統非多線程的代碼 運算時間: 50 * 3 = 150 秒。

上面就是Linux下shell多線程編程的實例介紹了,使用多線程編程還能夠改善程序結構,有興趣的朋友不妨試試看吧。

㈤ Linux多線程編程

程序代碼test.c共兩個線程,一個主線程,一個讀緩存區的線程:
#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); //這里先聲明一下讀緩存的線程,具體實現寫在後面了

int main()
{
int res,i;
pthread_t read_thread;
for(i=0;i<20;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;i<20;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
運行這個程序:
$ ./test.o:

㈥ 陳碩 linux 多線程伺服器編程 上的例子怎樣編譯

Linux多線程程序編譯時記得加上一個-pthread的編譯參數就可以了,不加這個參數就通不過。

㈦ linux創建多線程輸出abcde

創建多線程 - 落日鋼琴家的博客 - CSDN博客 - linux創建多線程

2021年3月28日最簡單的Linux下創建線程的例子 使用pthread_create函數 編譯的時候結尾處多加 -pthread ...
CSDN編程社區

Linux多線程 - Ustinian%的博客 - CSDN博客 - linux創建多線程

5月24日只創建task_struct,將那個創建出來的進程的task_struct和父進程的task_struct共享虛擬地址空間...
CSDN編程社區

㈧ linux下c、c++下多線程編譯

C語言要求除main函數外 所有的函數必須先聲明才能使用 你可以在函數定義的時候一起聲明這個函數 但是在這個函數定義之前不能使用這個函數
下面用通俗點的語言講: 你在main函數中調用了thread函數, 但是如果你把void *thread(void *vargp);刪掉了, 那麼編譯器就找不到這個函數了(因為編譯器是從前往後編譯這個程序的) 因此編譯器是通不過的
有兩種方法, 一種就是像你之前寫的 先聲明這個函數 第二種是把void *thread(void *vargp){...}放到main函數的前面.
有些返回值和參數類型為int型的函數也可以不用聲明, 編譯器也能通過, 不過這是不建議的 也是不符合標準的
標准建議每個函數都應該給出它們的顯式的聲明
希望你懂了 嘿嘿

閱讀全文

與linux多線程編譯相關的資料

熱點內容
單片機中三位數碼管原件 瀏覽:140
pdf可以刪除其中一頁 瀏覽:216
清dns緩存的命令 瀏覽:103
免費pdf在線轉換 瀏覽:768
堆貨演算法 瀏覽:878
vsc編譯vc程序 瀏覽:197
centos55命令 瀏覽:709
美國干編程有什麼條件 瀏覽:505
阿里雲伺服器遠程鏈接 瀏覽:251
墨鏡慧眼怎麼下載廠商的app 瀏覽:61
iphone加密專線 瀏覽:491
aes產生加密文件 瀏覽:416
編程實現藍牙通信 瀏覽:769
怎麼恢復掉簽的app 瀏覽:848
伺服器部署ip地址 瀏覽:323
涉密場所周邊安全防護距離演算法 瀏覽:674
安卓fpse模擬器怎麼設置加速 瀏覽:948
建行app怎麼生成電子簽章 瀏覽:510
獲取當前時間javadate 瀏覽:75
帶密碼的wifi如何加密 瀏覽:239