从共享内存中的数组中按降序排列元素

时间:2017-12-20 17:18:04

标签: c arrays linux

我有一个包含两种类型进程的程序: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尝试联系所有人之后,需要清空已联系的数组,因此可以重新开始。这个解决方案对我来说似乎不好,哪个更好?

注意:在完整代码中,有控制对共享内存的访问的信号量。

0 个答案:

没有答案