如何用C語言寫壹個簡單的多線程程序?
這是多線程的壹個例子。裏面只有兩個線程,是生產者/消費者模式。已經編譯通過,有詳細的評論。\x0d\如下:\x0d\ x0d \/*解釋生產者和消費者模型問題的Linux線程的控制和通信。妳\ x0d \生產者線程將產品發送到緩沖區,消費者線程取出產品。\x0d\有n個緩沖區,是壹個環形緩沖池。\ x0d \ */\ x0d \ # include \ x0d \ # include \ x0d \ \ x0d \ # define BUFFER _ SIZE 16 \ x0d \ \ x0d \ struct prod cons \ x0d \ { \ x0d \ int BUFFER[BUFFER _ SIZE];/*實際存儲數據的數組*/\ x0d \ pthread _ mutex _ t lock;/*互斥鎖,用於緩沖區上的互斥操作*/\x0d\ int readpos,writepos/*讀/寫指針*/\ x0d \ pthread _ cond _ t notempty;/*具有非空緩沖區的條件變量*/\ x0d \ pthread _ cond _ t not full;/*緩沖區不足的條件變量*/\ x0d \ };\x0d\\x0d\/*初始化緩沖區*/\ x0d \ void pthread _ init(structprodcons * p)\ x0d \ { \ x0d \ pthread _ mutex _ init(& p-& gt;lock,NULL);\ x0d \ pthread _ cond _ init(& amp;p->;notempty,NULL);\ x0d \ pthread _ cond _ init(& amp;p->;notfull,NULL);\ x0d \ p-& gt;read pos = 0;\ x0d \ p-& gt;write pos = 0;\x0d\}\x0d\\x0d\/*將乘積放入緩沖區,其中整數*/\ x0d \ void Put(structprodcons * p,int data)\ x0d \ { \ x0d \ pthread _ mutex _ lock(&;p->;鎖);\x0d\ /*等待緩沖區未滿*/\ x0d \ if((p-& gt;write pos+1)% BUFFER _ SIZE = = p-& gt;read pos)\ x0d \ { \ x0d \ pthread _ cond _ wait(& amp;p->;未滿,& ampp->;鎖);\ x0d \ } \ x0d \ p-& gt;緩沖區[p->;write pos]=數據;\ x0d \ p-& gt;write pos++;\ x0d \ if(p-& gt;writepos & gt= BUFFER _ SIZE)\ x0d \ p-& gt;write pos = 0;\ x0d \ pthread _ cond _ signal(& amp;p->;notempty);\ x0d \ pthread _ mutex _ unlock(& amp;p->;鎖);\x0d\}\x0d\/*從緩沖區中取出整數*/\ x0d \ int get(structprodcons * p)\ x0d \ { \ x0d \ int data;\ x0d \ pthread _ mutex _ lock(& amp;p->;鎖);\x0d\ /*等待緩沖區不為空*/\ x0d \ if(p-& gt;write pos = = p-& gt;read pos)\ x0d \ { \ x0d \ pthread _ cond _ wait(& amp;p->;notempty & amp;p->;鎖);//如果不為空,設置條件變量notempty\x0d\ }\x0d\ /*讀取數據,移動讀取指針*/\ x0d \ data = p-& gt;緩沖區[p->;read pos];\ x0d \ p-& gt;read pos++;\ x0d \ if(p-& gt;read pos = = BUFFER _ SIZE)\ x0d \ p-& gt;read pos = 0;\x0d\ /*設置緩沖區不足的條件變量*/\ x0d \ pthread _ cond _ signal(&;p->;未滿);\ x0d \ pthread _ mutex _ unlock(& amp;p->;鎖);\x0d\返回數據;\x0d\}\x0d\ /* test:生產站線程將1到1000的整數發送到緩沖區,消費者線程從緩沖區獲取整數,兩者都打印信息*/\ x0d \ # define over(-1)\ x0d \ struct prod。\ x0d \ void * producer(void * data)\ x0d \ { \ x0d \ int n;\ x0d \ for(n = 0;n\n”,n);\ x0d \ put(& amp;緩沖區,n);\ x0d \ } \ x0d \ put(& amp;緩沖,結束);\x0d\返回NULL\ x0d \ } \ x0d \ void * consumer(void * data)\ x0d \ { \ x0d \ int d;\ x0d \ while(1)\ x0d \ { \ x0d \ d = get(& amp;緩沖);\ x0d \ if(d = = OVER)\ x0d \ break;\ x0d \ else \ x0d \ printf("-& gt;%d\n ",d);\x0d\ }\x0d\返回NULL\ x0d \ } \ x0d \ int main()\ x0d \ { \ x0d \ pthread _ t th _ p,th _ c;\ x0d \ void * retval\ x0d \ pthread _ init(& amp;緩沖);\ x0d \ pthread _ create(& amp;th_p,NULL,生產者,0);\ x0d \ pthread _ create(& amp;th_c,NULL,消費者,0);\x0d\ /*等待兩個線程結束*/\ x0d \ pthread _ join (th _ p,& retval);\x0d\ pthread_join(th_c,ampretval);\x0d\返回0;\x0d\}