Так что у меня проблемы с производителем и потребителем с 2 потоками и мьютексами. Я пытаюсь сделать, чтобы продюсер заполнил массив с 10 1. Затем потребитель потребляет каждый 1 и делает его равным 0. Это заполнение и опорожнение повторяются 10 раз. Вот то, что я до сих пор, но она застревает на первом цикле:производитель и потребитель с мьютексами и pthreading
#include <stdio.h>
#include <pthread.h>
#define N 10
pthread_mutex_t mut;
pthread_cond_t condc,condp;
int queue[N];
int buffer;
void* prod() {
int i;
for(i = 0; i<10; i++) {
pthread_mutex_lock(&mut);
while(queue[N] != 0) {
pthread_cond_wait(&condp, &mut);
}
int k = 0;
for(k=0; k<10; k++) {
queue[k] = 1;
}
pthread_cond_signal(&condc);
pthread_mutex_unlock(&mut);
printf("\nproduced\n");
}
pthread_exit(0);
}
void* cons() {
int i;
for(i = 0; i<10; i++) {
pthread_mutex_lock(&mut);
while(queue[N] == 0) {
pthread_cond_wait(&condc, &mut);
}
int k = 0;
for(k=0; k<10; k++) {
queue[k] = 0;
}
pthread_cond_signal(&condp);
pthread_mutex_unlock(&mut);
printf("\nconsumed\n");
}
pthread_exit(0);
}
main() {
pthread_t producer, consumer;
pthread_mutex_init(&mut, 0);
pthread_cond_init(&condc, 0);
pthread_cond_init(&condp, 0);
pthread_create(&consumer,NULL,&cons, NULL);
pthread_create(&producer,NULL,&prod, NULL);
pthread_join(producer,0);
pthread_join(consumer,0);
pthread_cond_destroy(&condc);
pthread_cond_destroy(&condp);
pthread_mutex_destroy(&mut);
return 0;
}
Что вы подразумеваете под 'queue [N]'? –
он просто заполняет массив – samuelk71
Я имею в виду, почему вы получаете доступ к памяти за пределами массива? –