1

试图从我的另一个问题中解决一些错误。我的编译器正在读取 buff[counter] 作为缓冲区,因此未声明它。缓冲区是作为起始代码的一部分提供给我的,所以我不确定 buffer[counter] 是什么意思。尝试用谷歌搜索它并没有帮助,因为我不知道如何找出 buffer[counter] 的含义,它像 buffer_counter 吗?他们是说 buffer_counter 是缓冲区的计数器吗?任何帮助将不胜感激,特别是如果有人可以解释 [counter] 部分,因为这样我就可以自己修复它。

我的代码开头有这个

#define BUFFER_SIZE 1000

int insert_item(buffer_item item){// add item as long as buffer isn't full
   if(counter < BUFFER_SIZE) {
      buffer[counter] = item;
      counter++;
      return 0;
   }
   else {
      return -1; //buffer full error
   }
}

// Remove an item from the buffer
int remove_item(buffer_item *item)// remove item and decrement counter when buffer not empty
{
   if(counter > 0) {
      *item = buffer[(counter-1)];
      counter--;
      return 0;
   }
   else { //buffer empty error
   }
      return -1;
   }

还有这个 if(remove_item(&item)) {

触发一个相关的错误,称为“从不兼容的指针类型传递 remove_item 的参数 1”,如此处所示

void *consumer(void *param) {

   while(TRUE) {
      int rNum = rand() / RAND_DIVISOR; // sleep for a random period of time
      sleep(rNum);
      int item = rand()%100; // item is a random number between 1-100
      sem_wait(&full);// aquire the full lock */
      pthread_mutex_lock(&mutex);// aquire the mutex lock
      if(remove_item(&item)) {
         fprintf(stderr, "Consumer report error condition\n");
      }
      else {
         printf("consumer consumed %d\n", item);
      }
      pthread_mutex_unlock(&mutex);// release mutex lock
      sem_post(&empty); //signal empty
   }
}
4

1 回答 1

1

您需要声明全局buffercounter变量:

typedef char buffer_item;

buffer_item buffer[BUFFER_SIZE];
unsigned int counter;
于 2015-11-10T02:20:29.753 回答