1

寝床屋問題のコードを書きましたが、見た目がおかしいようです...コードは次のとおりです..

#include<stdlib.h>
#include<stdio.h>
#include<pthread.h>

#define MAX_C 10
int a[MAX_C], head=0, tail=0, tmp, tb, tc, count=1;
pthread_mutex_t B;
double time_slot[]={0.125,0.5,0.75,1.00,1.25,1.50,1.75,2.00};

void wait(int a)
{
    clock_t g=clock();
    while(((float)(clock()-g))/CLOCKS_PER_SEC != time_slot[a]);
}

void barber()
{
    printf("barber started\n");
    while(1) {
        tmp=0;
        while(head==tail) {
            printf("b\n");
        }
        tb=rand()%8;
        printf("tail:%d\n", tail);
        tail=(tail+1)%MAX_C;
        wait(tb);
    }
}

void customer()
{       
    printf("customers started\n");
    while(1) {
        wait(rand()%8);
        while((head+1)%MAX_C == tail) {
            printf("c\n");
        }
        a[head]=count-1;
        printf("head:%d\n", head);
        head=(head+1)%MAX_C;
    }
}

int main(int argc, char* argv[])
{
    pthread_t b,c;

    pthread_mutex_init(&B, NULL);
    pthread_create(&c, NULL, (void*)&customer, NULL);
    pthread_create(&b, NULL, (void*)&barber, NULL);

    pthread_join(b, NULL);
    pthread_join(c, NULL);  
    exit(0);
}

問題は、バッファがいっぱいになると...床屋が顧客を待っていることです...しかし、顧客はまったく実行されていません!!(バッファを待っているわけでも満たしていません)...実行していません...

4

2 に答える 2

0

Daneil Fischer が言ったように ... there was a wrong with while(((float)(clock()-g))/CLOCKS_PER_SEC != time_slot[a]);i should replace it with

while(((float)(clock()-g))/CLOCKS_PER_SEC <= time_slot[a]);

しかし、このクロック値の「欠落」がバッファ全体が満たされた後にのみ発生するのはまだ奇妙です....

于 2012-08-29T06:42:37.917 に答える