我有一个包含两种类型进程的程序:A和B.所有B进程都需要读取共享内存中包含有关每个A的信息的数组。然后,B类型进程需要联系具有最高分数的A。 A可以接受或拒绝该消息,如果它接受,则两个进程都会死亡。如果A拒绝,那么B应该找到第二高并再试一次,依此类推。我只能考虑这个解决方案:
while(running) {
pList* iterator = sharedStructure;
int highestPid;
int highestScore = -1;
while(iterator->pid) { // If entry exists
if(!inContacted(iterator->pid)) { // If A process was not contacted before
if(iterator->score > highestScore) {
highestScore = iterator->score;
highestPid = iterator->pid;
}
}
iterator++;
}
// Contact highestPid
if(accepted) {
// exit
} else {
addToContacted(highestPid);
}
}
此外,在B尝试联系所有人之后,需要清空已联系的数组,因此可以重新开始。这个解决方案对我来说似乎不好,哪个更好?
注意:在完整代码中,有控制对共享内存的访问的信号量。