📄 prg7_3.c
字号:
#include <pthread.h>
#include <stdlib.h>
#include <errno.h>
#define MAXNITEMS 1000000
#define MAXNTHREADS 100
int nitems;
struct{
pthread_mutex_t mutex;
int buff[MAXNITEMS];
int nput;
int nval;
}shared = {
PTHREAD_MUTEX_INITIALIZER
};
int min(int a ,int b)
{
return (a>=b ? b : a);
}
void *procedure(void *),*consume(void *);
int main(int argc,char **argv)
{
int i,nthreads,count[MAXNTHREADS];
pthread_t tid_produce[MAXNTHREADS],tid_consume;
if (argc != 3)
{
perror("usage:prodcons <#items> <#threads>");
exit(0);
}
nitems = min(atoi(argv[1]),MAXNITEMS);
nthreads = min(atoi(argv[2]),MAXNTHREADS);
pthread_setconcurrency(nthreads);
for(i=0;i<nthreads;i++)
{
count[i] = 0;
pthread_create(&tid_produce[i],NULL,procedure,&count[i]);
}
for(i=0; i<nthreads; i++)
{
pthread_join(tid_produce[i],NULL);
printf("count[%d] = %d\n",i,count[i]);
}
pthread_create(&tid_consume,NULL,consume,NULL);
pthread_join(tid_consume,NULL);
exit(0);
}
void *procedure(void *arg)
{
for(;;)
{
pthread_mutex_lock(&shared.mutex);
if (shared.nput >= nitems)
{
pthread_mutex_unlock(&shared.mutex);
return(NULL);
}
shared.buff[shared.nput] = shared.nval;
shared.nput++;
shared.nval++;
pthread_mutex_unlock(&shared.mutex);
*((int *)arg) +=1;
}
}
void *consume(void *arg)
{
int i;
for(i=0;i<nitems; i++)
{
if (shared.buff[i] != i)
printf("buff[%d]=%d\n",i,shared.buff[i]);
}
return(NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -