我和我的朋友们在网上偶然看到了这个示例代码,我们正在争论是否实现了关键部分。
那么,我们在这里还是不实现临界段?
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);
}
最佳答案
它可能会挨饿:如果两个任务都没有在另一个while
设置为true之前到达内部flagga
(如果您在每个任务中的语句之间交替使用,就会发生这种情况),这两个任务都会在其内部卡住环。