经典指数          
原因
2229
浏览数
0
收藏数
 

以下的生产者消费者程序中,那个不会出现锁死,并且开销最少?
注:
down()
1 判断信号量的取值是否大于等于1
2 如果是,将信号量的值减去一,继续向下执行
3 否则,在该信号量上等待(进城被挂起)
up()
1 将信号量的值增加1(此操作将叫醒一个在信号量上面等待的进程)
2 线程继续往下执行
down()和up()是一组原子操作
  • #define N 100 //定义缓冲区的大小
    typedef int semaphore; //定义信号量类型
    semaphore mutex = 1; //互斥信号量
    semaphore empty = N; //缓冲区计数信号量
    semaphore full = 0; //缓冲区计数信号量,用来计数缓冲区里的商品数量
    void producer(void)
    {
        int item;
        while(TRUE){
            item = produce_item();
            down(&empty);
            down(&empty);
            insert_item(item);
            up(&mutex);
            up(&full);
        }
    }
    void consumer(void)
    {
        int item;
        while(TRUE){
            down(&full);
            down(&mutex);
            item = remove_item();
            up(&mutex);
            up(&empty);
            consume_item(item);
        }
    }
    
  • #define N 100
    typedef int semaphore;
    semaphore empty = N;
    semaphore full = 0;
    void producer(void)
    {
        int item;
        while(TRUE){
            item = produce_item();
            down(&empty);
            insert_item(item);
            up(&full);
        }
    }
    void consumer(void)
    {
        int item;
        while(TRUE){
            down(&full);
            item = remove_item();
            up(&empty);
            consume_item(item);
        }
    }
    
  • #define N 100
    typedef int semaphore;
    semaphore mutex = 1;
    semaphore empty = N;
    semaphore full = 0;
    void producer(void)
    {
        int item;
        while(TRUE){
            item = produce_item();
            down(&empty);
            down(&empty);
            insert_item(item);
            up(&mutex);
            up(&full);
        }
    }
    void consumer(void)
    {
        int item;
        while(TRUE){
            down(&mutex);
            down(&full);
            item = remove_item();
            up(&mutex);
            up(&empty);
            consume_item(item);
        }
    }
    
  • #define N 100
    typedef int semaphore;
    semaphore mutex = 1;
    semaphore empty = N;
    semaphore full = 0;
    void producer(void)
    {
        int item;
        while(TRUE){
            item = produce_item();
            down(&empty);
            down(&mutex);
            insert_item(item);
            up(&full);
            up(&mutex);
        }
    }
    void consumer(void)
    {
        int item;
        while(TRUE){
            down(&full);
            down(&mutex);
            item = remove_item();
            up(&empty);
            up(&mutex);
            consume_item(item);
        }
    }
    

     举报   纠错  
 
切换
1 个答案
这题为何这么长
 
切换
撰写答案
扫描后移动端查看本题