资源简介

解决进程同步中熟睡的理发师问题 包含源代码与输出结果

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 

#define TRUE 1
#define FALSE 0

// 最大椅子数
#define MAX_CHAIR 5
// 最大顾客数
#define MAX_CUSTOMERS 20

// 定义p、v操作
#define p(x) sem_wait(&x)
#define v(x) sem_post(&x)

// 椅子
int chair;
// 理发师和顾客信号量
sem_t baber customers;
// 互斥信号量 保护临界区(即椅子)
pthread_mutex_t chair_mutex;

// 初始化椅子数和信号量
int init()
{
    chair = MAX_CHAIR;
    return (sem_init(&baber 0 1) || sem_init(&customers 0 0));
}

// 理发师线程函数
void* _baber(void *arg)
{
    printf(“the baber shop opens...\n\n“);
    while (TRUE)
    {
        p(customers); // 尝试为一位顾客服务,否则睡觉
        // printf(“baber wake up...\n“);
        pthread_mutex_lock(&chair_mutex);
        ++chair;    // 一个顾客去理发,空出一个椅子
        printf(“the baber is working on one...\nso the chair left : 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2374  2018-05-05 03:54  baber.c
     文件        2561  2018-05-05 03:57  baber.txt

评论

共有 条评论