0

私はこのジェネレーターを持っており、最初に出力される数値は 1804289383 です。

ただし、134519520 という数字が表示されます。最後の数桁が異なる場合もありますが、通常はこの数字の前後です。

理由はありますか?同様のコードで目的の番号を出力しましたが、これは機能しません。

#include <stdio.h>
#include <pthread.h>
#define MAX_NUM 10
#define MAX_RAND_NUM 100
#define SIZE 10

pthread_mutex_t the_mutex;
pthread_cond_t cond;
int buffer[SIZE];
int num_of_items = 0;

void *producer(void *ptr)
{   
    int i  = 0;
    int rand_num = 0;
    int rear = 0;   
    srandom((unsigned int)0);


        rand_num = random();
    pthread_mutex_lock(&the_mutex);
    while (num_of_items = SIZE) {
        pthread_cond_wait(&cond,&the_mutex);
    }//end of while loop
      buffer[rear] = rand_num;
      rear = (rear + 1) % SIZE;
      num_of_items +=1;
      printf("Producer on loop %d it stored %d \n",i,rand_num);
      pthread_cond_signal(&cond);
      pthread_mutex_unlock(&the_mutex);

        pthread_exit(0);
}

void *consumer(void *ptr)
{       int i  = 0;
        int rand_num = 0;
    int front = 0;

    pthread_mutex_lock(&the_mutex);
        while (num_of_items == 0) pthread_cond_wait(&cond,&the_mutex);
            printf("Consumer on loop %d it stored %d \n",i,buffer);
        //buffer[0] = 0;
        front = (front + 1) % SIZE;
        num_of_items -= 1;
            pthread_cond_signal(&cond);
            pthread_mutex_unlock(&the_mutex);

            pthread_exit(0);
}

int main(int argc, char **argv)
{
   pthread_t pro,con;
   pthread_mutex_init(&the_mutex,0);
   pthread_cond_init(&cond,0);

   pthread_create(&con,0,consumer,0);
   pthread_create(&pro,0,producer,0);
   pthread_join(pro,0);
   pthread_join(con,0);
   pthread_cond_destroy(&cond);

   pthread_mutex_destroy(&the_mutex);
}
4

1 に答える 1

2

問題は次のとおりです。

printf("Consumer on loop %d it stored %d \n",i,buffer);

bufferポインターに減衰しますが、それを として出力しようとしていますint。あなたが得ている大きな数字は、アドレスの整数表現です。おそらくあなたはbuffer[i]何かをするつもりでした。

これもちょっと疑わしいように見えます:

while (num_of_items = SIZE)

おそらくそれは==.

コンパイラがこれらの両方について警告していない場合は、より良いものを探すか、警告レベルを上げる必要があります。

于 2013-11-05T01:53:11.073 に答える