关于计算机操作系统的问题
关于哲学家进餐思考的伪码(好像是这么说的吧)如下:#defineTRUE1#defineN5//哲学家数Semaphore_tmutex=1,fork[]={1,1,1,...
关于哲学家进餐思考的伪码(好像是这么说的吧)如下:
#define TRUE 1
#define N 5 // 哲学家数
Semaphore_t mutex = 1, fork[] = {1, 1, 1, 1, 1};
void philosopher (int i) // i是哲学家编号:0~N-1
{
while (TRUE) {
think();
P(&mutex);
P(&fork[i]);
P(&fork[(i+1) % N]);
V(&mutex)
eat();
V(&fork[i]);
V(&fork[(i+1) % N]); }
}
这些语句里诸如P(&mutex); P(&fork[i]);是什么意思?这个&符号是什么意思?
恳请高人解答 展开
#define TRUE 1
#define N 5 // 哲学家数
Semaphore_t mutex = 1, fork[] = {1, 1, 1, 1, 1};
void philosopher (int i) // i是哲学家编号:0~N-1
{
while (TRUE) {
think();
P(&mutex);
P(&fork[i]);
P(&fork[(i+1) % N]);
V(&mutex)
eat();
V(&fork[i]);
V(&fork[(i+1) % N]); }
}
这些语句里诸如P(&mutex); P(&fork[i]);是什么意思?这个&符号是什么意思?
恳请高人解答 展开
4个回答
展开全部
这是信号量PV操作。
P是请求操作,V是释放操作(使用结束后让别人请求)。
在变量前加&是指传地址方式,
C语言中函数参数为结构体时,一般采用传地址方式。(伪代码其实不用这么写)
这里采用了同时请求左右筷子的策略。
每个哲学家吃饭前需要请求筷子,也就是
P(&fork[i]);
P(&fork[(i+1) % N]);
直接这么写会有死锁。所以要用互斥变量mutex将其做成临界区,防止同时请求。
然后,吃饭。
吃完饭,释放筷子,让别人请求,即:
V(&fork[i]);
V(&fork[(i+1) % N]);
P是请求操作,V是释放操作(使用结束后让别人请求)。
在变量前加&是指传地址方式,
C语言中函数参数为结构体时,一般采用传地址方式。(伪代码其实不用这么写)
这里采用了同时请求左右筷子的策略。
每个哲学家吃饭前需要请求筷子,也就是
P(&fork[i]);
P(&fork[(i+1) % N]);
直接这么写会有死锁。所以要用互斥变量mutex将其做成临界区,防止同时请求。
然后,吃饭。
吃完饭,释放筷子,让别人请求,即:
V(&fork[i]);
V(&fork[(i+1) % N]);
专业语音导览
2024-11-15 广告
2024-11-15 广告
"分区讲解系统是一种在展馆或展厅使用的讲解系统,也被称为团队智慧讲解系统、展厅分区讲解系统、展馆讲解系统、分区解说系统等不同称谓。它适用于讲解员向游客进行团队讲解的情况,讲解员可手持无线讲解发射器进行语音讲解,参观者无需佩戴耳机,也可以听到...
点击进入详情页
本回答由专业语音导览提供
展开全部
P(&mutex)是函数,这一句进行函数调用。
P(&fork[i])也是函数调用。&fork[i]是取fork[i]数组的地址。
符号&是取地址符号,C++都有说明的。整个程序要放在上下文才能理解。
P(&fork[i])也是函数调用。&fork[i]是取fork[i]数组的地址。
符号&是取地址符号,C++都有说明的。整个程序要放在上下文才能理解。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
P 跟 V 都是函数名 P(&mutext); 表示调用函数P,括号中的&mutext 表示引用mutext的地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |