Одно из решений заключается в том, чтобы в цикле while(input != exit)
был тип send .
И сделайте так, чтобы ваш main ждал только исходящего потока (что означает наличие pthread_join только для исходящего потока). Таким образом, когда пользователь выбирает выход, основной будет выходить, не дожидаясь входящего потока.
Во-вторых, вам нужно использовать блокирующую функцию приема в функции приема. Таким образом, он либо обрабатывает входящее сообщение, либо ожидает его.
Другое решение заключается в создании типа while(input != exit)
цикла в main . Определите очередь сообщений, в которой main может ставить в очередь сообщения для отправки, а исходящий поток использует сообщения из этой цепочки для их фактической отправки.
Исходящий поток либо отправляет сообщение, либо блокируется до тех пор, пока в очереди не появится сообщение для отправки.
Поток ввода ведет себя так же, как описано в предыдущем решении.