Как запустить параллельные потоки, которые останавливаются после завершения самого быстрого потока (C, pthreads или openmp) - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь найти способ запустить несколько клиентов сокетов параллельно;такой, что как только первый клиент получает действительный ответ - код продолжает работать и останавливает все еще работающие потоки.

Мой вариант использования для клиентского устройства, которое имеет одно серверное устройство, с которым пытается связаться - однакопуть к этому устройству может принимать от 1 до 5 различных путей (в роуминге беспроводная сеть с несколькими шлюзами).

Мой код в настоящее время поддерживает это путем последовательной попытки нескольких IP-адресов, пока он не подключится, но это мучительно медленно, когда ему приходится ждатьпервые 4 соединения потерпят неудачу.Однако я борюсь с pthreads, поскольку мне еще не удалось найти способ отменить другие потоки без катастрофических последствий.

Вот какой-то код псевдо:


    //psuedo code

    char host[5][100];
    strcpy(host[0], "IP0");
    strcpy(host[1], "IP1");
    strcpy(host[2], "IP2");
    strcpy(host[3], "IP3");
    strcpy(host[4], "IP4");

    spawn5Threads()
    {
        data = getDataFromTCPSocket(host[myThreadIndex]);

        if(data.valid)
        {
            cancelAllOtherThreads();
        }
    }

    if(data.valid)
    {
        sendDataToBeProcessed(data);
    }
    else
    {
        //fail!
    }
...