- 论坛徽章:
- 0
|
回复 #5 思一克 的帖子
while代码
#include <stdio.h>
#include <pthread.h>
#include<semaphore.h>
#define SIZE 20
int ProductID=0;
int ConsumeID=0;
int in = 0;
int out = 0;
int buffer[SIZE];
int j=0;
int k=0;
pthread_mutex_t mutex;
sem_t empty;
sem_t full;
pthread_t producerID[5];
pthread_t consumerID[5];
void *producer(void* ID)
{
while(j<26){
sem_wait(&empty);
pthread_mutex_lock(&mutex);
printf("producerID:");
printf("%s\n", ID);
printf("ProductID:");
printf("%d\n", ++ProductID);
int i;
printf("in:");
printf("%d\n",in);
if(ProductID==21)
ProductID=1;
buffer[in] = ProductID;
in = (in+1)%SIZE;
j++;
for(i=0;i<SIZE;i++)
{
printf(" %d",buffer);
}
printf("\n");
pthread_mutex_unlock(&mutex);
sem_post(&full);
sleep(3);
}
}
void *consumer(void* ID)
{
while(k<26){
sem_wait(&full);
pthread_mutex_lock(&mutex);
int i;
printf("consumerID:");
printf("%s\n",ID);
printf("out:");
printf("%d\n",out);
ConsumeID = buffer[out];
buffer[out]=0;
out = (out+1)%SIZE;
printf("ConsumeID:");
printf("%d\n", ConsumeID);
k++;
for(i=0;i<SIZE;i++)
{
printf(" %d",buffer);
}
printf("\n");
pthread_mutex_unlock(&mutex);
sem_post(&empty);
sleep(3);
}
}
int main()
{
char a[10][3]={"p1","p2","p3","p4","p5","c1","c2","c3","c4","c5"};
int i;
sem_init(&empty,0,20);
sem_init(&full,0,0);
for(i=0;i<5;i++)
{
pthread_create(&producerID,NULL,&producer,a);
}
for(i=0;i<5;i++)
{
pthread_create(&consumerID,NULL,&consumer,a[i+5]);
}
for(i=0;i<5;i++)
{
pthread_join(producerID,NULL);
pthread_join(consumerID,NULL);
}
return 0;
}
for代码
#include <stdio.h>
#include <pthread.h>
#include<semaphore.h>
#define SIZE 20
int ProductID=0;
int ConsumeID=0;
int in = 0;
int out = 0;
int buffer[SIZE];
int j=0;
int k=0;
pthread_mutex_t mutex;
sem_t empty;
sem_t full;
pthread_t producerID[5];
pthread_t consumerID[5];
void *producer(void* ID)
{
for(j=0;j<26;j++){
sem_wait(&empty);
pthread_mutex_lock(&mutex);
printf("producerID:");
printf("%s\n", ID);
printf("ProductID:");
printf("%d\n", ++ProductID);
int i;
printf("in:");
printf("%d\n",in);
if(ProductID==21)
ProductID=1;
buffer[in] = ProductID;
in = (in+1)%SIZE;
for(i=0;i<SIZE;i++)
{
printf(" %d",buffer);
}
printf("\n");
pthread_mutex_unlock(&mutex);
sem_post(&full);
sleep(3);
}
}
void *consumer(void* ID)
{
for(k=0;k<26;k++){
sem_wait(&full);
pthread_mutex_lock(&mutex);
int i;
printf("consumerID:");
printf("%s\n",ID);
printf("out:");
printf("%d\n",out);
ConsumeID = buffer[out];
buffer[out]=0;
out = (out+1)%SIZE;
printf("ConsumeID:");
printf("%d\n", ConsumeID);
for(i=0;i<SIZE;i++)
{
printf(" %d",buffer);
}
printf("\n");
pthread_mutex_unlock(&mutex);
sem_post(&empty);
sleep(3);
}
}
int main()
{
char a[10][3]={"p1","p2","p3","p4","p5","c1","c2","c3","c4","c5"};
int i;
sem_init(&empty,0,20);
sem_init(&full,0,0);
for(i=0;i<5;i++)
{
pthread_create(&producerID,NULL,&producer,a);
}
for(i=0;i<5;i++)
{
pthread_create(&consumerID,NULL,&consumer,a[i+5]);
}
for(i=0;i<5;i++)
{
pthread_join(producerID,NULL);
pthread_join(consumerID,NULL);
}
return 0;
} |
|