如何用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\}