您的位置:首页 > 教育 > 锐评 > 设计网站推荐平面_精品一卡2卡三卡4卡二百信息网_网络营销策划与创意_友联互换

设计网站推荐平面_精品一卡2卡三卡4卡二百信息网_网络营销策划与创意_友联互换

2025/4/26 9:02:01 来源:https://blog.csdn.net/ywczuishuai/article/details/147519635  浏览:    关键词:设计网站推荐平面_精品一卡2卡三卡4卡二百信息网_网络营销策划与创意_友联互换
设计网站推荐平面_精品一卡2卡三卡4卡二百信息网_网络营销策划与创意_友联互换

1.什么是信号量?

定义:记录一些信息(即量),并根据这个信息决定睡眠还是唤醒(即信号)。睡眠和唤醒只是一个信号(相当于0和1)。

2.问题:一种资源的数量是8,这个资源对应的信号量的当前值是2,说明:(B)

A. 有2个进程等待这个资源。                //值为-2选A

B. 有2个资源可以使用。                

3.信号量:1965年,由荷兰学者Dijkstra提出的一种特殊整型变量,量用来记录,信号用来sleep和wake。

(重要)P在荷兰语里是test(检测是否有可用资源),V是increase(增加内容)。

struct semaphore
{int value;    //记录资源个数PCB *queue;    //记录等待在该信号量上的进程,使用队列存储
}P(semaphore s)    //消费资源(对应生产者生产数据占用内存)
{s.value--;if(s.value < 0) sleep(s.queue);
}V(semaphore s)    //产生资源(对应消费者从内存中取数据)
{s.value++;if(s.value <= 0) wake(s.queue);    //说明上一步value<0,存在进程等待资源,所以唤醒一个
}

4.(重点)用信号量解生产者——消费者问题

int fd = open("buffer.txt");
write(fd, 0, sizeof(int));    //写in    用文件定义共享缓冲区
write(fd, 0, sizeof(int));    //写outsemaphore full = 0;    //文件里的内容
semaphore empty = BUFFER_SIZE;    //资源的数量
semaphore mutex = 1;    //互斥(原子操作)Producer(item)
{P(empty);    //检测是否有可用资源并减1P(mutex);读入in;将item写入到in的位置上;V(mutex);V(full);    //让full的值增加
}Consumer()
{P(full);    //检测是否有内容P(mutex);读入out;从文件中的out位置读出到item;打印item;V(mutex);V(empty);    //可用资源+1
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com