我和我的朋友在网上看到了这个示例代码,我们正在争论它是否实现了一个关键部分。我们的意见来回反复,所以我们考虑过请求stackoverflow。
那么,我们是否在这里实施一个关键部分?
int flagga[2];
void task0(void){
while(1){
/* some code */
flagga[0]=true;
while(flagga[1]==true) /*do nothing*/;
/* critical sektion */
flagga[0]=false;
}
}
void task1(void){
while(1){
/* some code */
flagga[1]=true;
while(flagga[0]==true) /*do nothing*/;
/* critical section */
flagga[1]=false;
}
}
void main(void){
flagga[0]=flagga[1]=false;
startThread(task0);
startThread(task1);
while(1);
}
答案 0 :(得分:1)
它可能遭受饥饿:如果任何一个任务都没有到达内部while
之前另一个已将其flagga
设置为true(如果你在每个任务中的语句之间粘连交替,则会发生这种情况)将陷入其内在的循环。