當前位置:首頁 » 編程軟體 » c多線程編譯

c多線程編譯

發布時間: 2023-01-30 21:27:50

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

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

❷ C++多線程編程要用到哪些庫如何編譯這些庫

千萬別以為現在的C++沒有原生的多線程庫

OpenMP 是一個多線程庫,不過他還需要編譯器的支持,好在現在絕大多數都已經支持(這個可能是目前最流行的原生多線程庫了)

C++的標准頭process.h(太老的沒有,2002年後的基本都有)中有操作進程和執行環境的函數,能實現簡單的進程級或線程級並行操作。
使用起來非常非常方便。windows平台的C語言編譯工具也都有這個頭,unix平台上的unistd.h跟這個頭很相似,函數名與用法也基本一樣。

還有一些其他的第三方多線程庫,你可以網上搜搜,但是注意是否跨平台等問題

如果你要使用操作系統相關的多線程API,那麼也就沒什麼選擇餘地,windows上只能用windows的多線程API (參考MSDN) unix同理

OpenMP的優點是跨平台,功能豐富強大(例如提供了各種鎖、信號等),代碼改動也比較小,使用起來也非常方便快捷。缺點是沒有像直接用系統API時透明感,畢竟使用系統API時,程序員完全控制了邏輯,非常直觀,當然這也帶來了錯誤風險和代碼復雜度

❸ c的多線程實現

#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);
}

不算是雙核優化哈!也不是並發處理,如果真的讓多線程發揮到極致就用多核經較好

❹ C語言怎樣實現多線程

首先你要有控制蛇移動方向的全局變數(定義在main以外因為線程函數也要調用它,每次鍵盤輸入都會修改它的值), 比如 char direction 'a' ==左 'w' == 右 'd'==上 's' == 下,然後你在移動時應該是在while裡面操作的吧,你每移動一步前都讀一下direction這個變數的數值然後再控制移動方向(注意s這個鍵可以忽略因為不會倒著走) 然後你可以用pthread.h這個庫 例子是 pthread t;// 定義一個線程 pthread_create(&t, null, listen_keyboard_input, null);//建立線程執行listen_keyboard_input這個函數 這個線程執行的函數 void listen_keyboard_input(){ while(應該通過某個信號來退出這個循環,從而表示游戲結束){ direction =getchar(); } } 但是這里存在同步問題, 比如當這個線程的getchar()在給direction輔助的同時,你控制貪吃蛇移動的線程正在調用 direction的值來判斷下一個移動方向,這就會出問題,所以要加一個鎖,叫 mutex lock;這個也定義成全局變數可以使各線程共享。 pthread_mutex_t mutex; //定義一個鎖 pthread_mutex_init(&mutex, null, null);//初始化 然後把函數修改成 void listen_keyboard_input(){ while(應該通過某個信號來退出這個循環,從而表示游戲結束){ pthread_mutex_lock(&mutex); direction =getchar(); pthread_mutex_unlock(&mutex); } } 另外一個控制貪吃蛇移動的時候也要加鎖 while(.....){ char c; pthread_mutex_lock(&mutex); c = direction; pthread_mutex_unlock(&mutex); switch(c){ ................ } ................................... } 這樣就好了 注意你的控制貪吃蛇移動的部分也必須要放在另外一個pthread 裡面執行,如果放在主線程, 主線程會一直等listen_keyboard_input而什麼事都不會做 你把這兩個線程用 pthread_create 創建完成後 用 t1.join(); t2.join(); 就可以使這兩個線程並發執行了 如果你用的是linux 來編譯的,你再輸入gcc 指令後加上 -lpthread 就可以了 還有什麼不懂的你可以多找找 pthread 類的例子

❺ 一個C語言多線程編譯的時候 ,提示出錯在16行:expected primary-expression before 『void』 沒弄懂

第 15 行,把 void * 去掉試試。

❻ C語言多線程實現

你是想模擬多線程?還是想用WIN SDK寫多線程?
要是是WINSDK 里的東西 看看孫鑫的 MFC 視頻就會有的,在第15章,是用WINSDK編寫的。

❼ C語言編譯器是否支持多線程

C語言編譯器有很多,只要不是太舊的都支持多線程。C語言本身是沒有多線程的概念的,都是操作系統提供支持,所以不同操作系統中的多線程實現起來可能完全不一樣。

❽ c語言如何編寫一個簡單的多線程程序

這是一個多線程例子,裡面只有兩個線程,是生產者/消費者模式,已編譯通過,注釋很詳細,x0dx0a如下:x0dx0ax0dx0a/* 以生產者和消費者模型問題來闡述Linux線程的控制和通信你 x0dx0a 生產者線程將生產的產品送入緩沖區,消費者線程則從中取出產品。x0dx0a 緩沖區有N個,是一個環形的緩沖池。x0dx0a */x0dx0a#include x0dx0a#include x0dx0ax0dx0a#define BUFFER_SIZE 16x0dx0ax0dx0astruct prodconsx0dx0a{x0dx0a int buffer[BUFFER_SIZE];/*實際存放數據的數組*/x0dx0a pthread_mutex_t lock;/*互斥體lock,用於對緩沖區的互斥操作*/x0dx0a int readpos,writepos; /*讀寫指針*/x0dx0a pthread_cond_t notempty;/*緩沖區非空的條件變數*/x0dx0a pthread_cond_t notfull;/*緩沖區未滿 的條件變數*/x0dx0a};x0dx0ax0dx0a/*初始化緩沖區*/x0dx0avoid pthread_init( struct prodcons *p)x0dx0a{x0dx0a pthread_mutex_init(&p->lock,NULL);x0dx0a pthread_cond_init(&p->notempty,NULL);x0dx0a pthread_cond_init(&p->notfull,NULL);x0dx0a p->readpos = 0;x0dx0a p->writepos = 0;x0dx0a}x0dx0ax0dx0a/*將產品放入緩沖區,這里是存入一個整數*/x0dx0avoid put(struct prodcons *p,int data)x0dx0a{x0dx0a pthread_mutex_lock(&p->lock);x0dx0a /*等待緩沖區未滿*/x0dx0a if((p->writepos +1)%BUFFER_SIZE ==p->readpos)x0dx0a {x0dx0a pthread_cond_wait(&p->notfull,&p->lock);x0dx0a }x0dx0a p->buffer[p->writepos] =data;x0dx0a p->writepos++;x0dx0a if(p->writepos >= BUFFER_SIZE)x0dx0a p->writepos = 0;x0dx0a pthread_cond_signal(&p->notempty);x0dx0a pthread_mutex_unlock(&p->lock);x0dx0a}x0dx0a/*從緩沖區取出整數*/x0dx0aint get(struct prodcons *p)x0dx0a{x0dx0a int data;x0dx0a pthread_mutex_lock(&p->lock);x0dx0a /*等待緩沖區非空*/x0dx0a if(p->writepos == p->readpos)x0dx0a {x0dx0a pthread_cond_wait(&p->notempty ,&p->lock);//非空就設置條件變數notemptyx0dx0a }x0dx0a /*讀書據,移動讀指針*/x0dx0a data = p->buffer[p->readpos];x0dx0a p->readpos++;x0dx0a if(p->readpos == BUFFER_SIZE)x0dx0a p->readpos = 0;x0dx0a /*設置緩沖區未滿的條件變數*/x0dx0a pthread_cond_signal(&p->notfull);x0dx0a pthread_mutex_unlock(&p->lock);x0dx0a return data;x0dx0a}x0dx0a /*測試:生產站線程將1 到1000的整數送入緩沖區,消費者線程從緩沖區中獲取整數,兩者都列印信息*/x0dx0a#define OVER (-1)x0dx0astruct prodcons buffer;x0dx0avoid *procer(void *data)x0dx0a{x0dx0a int n;x0dx0a for( n=0;n<1000;n++)x0dx0a {x0dx0a printf("%d ------>\n",n);x0dx0a put(&buffer,n);x0dx0a }x0dx0a put(&buffer,OVER);x0dx0a return NULL;x0dx0a}x0dx0avoid *consumer(void *data)x0dx0a{x0dx0a int d;x0dx0a while(1)x0dx0a {x0dx0a d = get(&buffer);x0dx0a if(d == OVER)x0dx0a break;x0dx0a elsex0dx0a printf("----->%d\n",d);x0dx0a }x0dx0a return NULL;x0dx0a}x0dx0aint main()x0dx0a{x0dx0a pthread_t th_p,th_c;x0dx0a void *retval;x0dx0a pthread_init(&buffer);x0dx0a pthread_create(&th_p,NULL,procer,0);x0dx0a pthread_create(&th_c,NULL,consumer,0);x0dx0a /*等待兩個線程結束*/x0dx0a pthread_join(th_p, &retval);x0dx0a pthread_join(th_c,&retval);x0dx0a return 0;x0dx0a}

❾ C語言多線程的概念

線程:線程是程序中的一個執行流,每個線程都有自己的專有寄存器(棧指針、程序計數器等),但代碼區是共享的,即不同的線程可以執行同樣的函數。
多線程:多線程是指程序中包含多個執行流,即在一個程序中可以同時運行多個不同的線程來執行不同的任務,也就是說允許單個程序創建多個並行執行的線程來完成各自的任務。
C語言的開始設計,並未設計多線程的機制,由於隨著軟硬體的發展及需求的發展。後來C語言才開發了線程庫以支持多線程的操作、應用。
主要基於Linux介紹C多線程。在編譯C的多線程時候,一方面必須指定Linux C語言線程庫多線程庫pthread,才可以正確編譯(例如:gcc test.c -o test -lpthread);另一方面要包含有關線程頭文件#include <pthread.h>。

❿ C語言如何實現多線程同時運行

1、點擊菜單欄的「Project」選項卡,下拉列表的最後一項「Project options...」是對當前工程的的屬性進行設置的。

熱點內容
qq密碼圖案要改什麼 發布:2024-02-25 20:42:19 瀏覽:766
以下對c語言函數 發布:2024-02-25 20:23:57 瀏覽:811
excel高級腳本 發布:2024-02-25 19:34:41 瀏覽:550
四大開源分布式存儲 發布:2024-02-25 19:22:43 瀏覽:257
資料庫原理第二版 發布:2024-02-25 19:18:54 瀏覽:774
51單片機c語言實例 發布:2024-02-25 18:35:00 瀏覽:173
傳奇腳本定製一般多少錢 發布:2024-02-25 18:34:56 瀏覽:638
網路上傳速度很慢 發布:2024-02-25 18:26:47 瀏覽:436
易語言邏輯硬碟鎖源碼 發布:2024-02-25 18:18:57 瀏覽:337
惠普dl580伺服器管理口地址 發布:2024-02-25 18:05:26 瀏覽:523