Я не могу отлаживать следующую программу, так как у меня нет linux дома. Я не могу выполнить программу, но пока я составлял программу в лабораторном сеансе, я получил две ошибки. Может кто-нибудь мне помочь? Если кто-то сможет выполнить эту программу после ее отладки, пожалуйста, опубликуйте результат, пожалуйста.POSIX темы и семафоры
Код выглядит следующим образом:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#define BUFFER_SIZE 10
sem_t empty;
sem_t full;
pthread_mutex_t mutex;
int buffer[BUFFER_SIZE];
pthread_t ptid,ctid;
pthread_attr_t attr;
void *producer(void *param);
void *consumer(void *param);
int counter;
int main()
{
init();
pthread_create(&ptid, &attr, producer, NULL);
pthread_create(&ctid, &attr, consumer, NULL);
pthread_join(ptid,NULL);
pthread_join(ctid,NULL);
return 0;
}
void init()
{
pthread_mutex_init(&mutex, NULL);
pthread_attr_init(&attr);
sem_init(&full, 0, 0);
sem_init(&empty, 0, BUFFER_SIZE);
counter = 0;
for(int j=0;j<BUFFER_SIZE;j++)
{ buffer[j] = 0;}
}
void *producer(void *param)
{
int item;
while(1)
{
item=item+1;
sem_wait(&empty);
pthread_mutex_lock(&mutex);
if(insert_item(item))
{
perror("Producer error.");
return 1;
}
else
{
printf("Producer produced %d\n", item);
}
pthread_mutex_unlock(&mutex);
sem_post(&full);
}
}
void *consumer(void *param)
{
int item;
while(1)
{
sleep(5);
sem_wait(&full);
pthread_mutex_lock(&mutex);
if(remove_item(item))
{
perror("Consumer error.");
}
else
{
printf("Consumer consumed %d\n", item);
}
pthread_mutex_unlock(&mutex);
sem_post(&empty);
}
}
int insert_item(int item)
{
if(counter < BUFFER_SIZE)
{
buffer[counter] = item;
counter++;
return 0;
}
else
return -1;
}
int remove_item(int item)
{
if(counter > 0)
{
item = buffer[(counter-1)];
counter--;
return ;
}
else
return -1;
}
после внесения изменений и исправлений им получить следующий результат прямо сейчас, не является искомым .......
[[email protected] sree58]# gcc producerconsumer.c -lpthread -lrt
producerconsumer.c: In function ‘producer’:
producerconsumer.c:54: warning: return makes pointer from integer without a cast
[[email protected] sree58]# ./a.out
Producer produced 1804289383
Producer produced 846930886
Producer produced 1681692777
Producer produced 1714636915
Producer produced 1957747793
Producer produced 424238335
Producer produced 719885386
Producer produced 1649760492
Producer produced 596516649
Producer produced 1189641421
Consumer error.: Success
Producer produced 1025202362
Consumer error.: Illegal seek
Producer produced 1350490027
Consumer error.: Illegal seek
Producer produced 783368690
Consumer error.: Illegal seek
Producer produced 1102520059
Consumer error.: Illegal seek
Producer produced 2044897763
Consumer error.: Illegal seek
Producer produced 1967513926
Consumer error.: Illegal seek
Producer produced 1365180540
Consumer error.: Illegal seek
Producer produced 1540383426
Consumer error.: Illegal seek
Producer produced 304089172
Consumer error.: Illegal seek
Producer produced 1303455736
Consumer error.: Illegal seek
Producer produced 35005211
Consumer error.: Illegal seek
Producer produced 521595368
Consumer error.: Illegal seek
Producer produced 294702567
Consumer error.: Illegal seek
Producer produced 1726956429
пожалуйста кто-то ведет меня ......
Какие ошибки? Я, например, не предоставляю бесплатную службу отладки. –
Я знаю ..... но PLS помочь мне ...... им просить помощи, потому что у меня нет linux дома .... и я должен отправить эту программу завтра .... ошибки связаны с Функция init(), я думаю ..... PLS, помогите мне .... – chinu
Попробуйте использовать любую свободную онлайн-версию IDE: s. Думаю, они, скорее всего, построят Linux-подобную среду. – unwind