Вы переделываете переменную host
локально (это также называется «теневым копированием»)
host := new(objects.HostOS)
, вместо этого вы должны использовать оператор присваивания
host = new(objects.HostOS)
pthread_cond_timedwait занимает абсолютное время, не относительное время. Необходимо сделать время ожидания абсолютным путем добавления к текущему времени к значению тайм-аута.
Условная переменная может побочно разблокировать. Необходимо проверить его в цикл и проверить условие каждый раз через. Необходимо будет, вероятно, обновить значение тайм-аута также.
Я нашел некоторую документацию для pthread_cond_timedwait
здесь.
При использовании условных переменных всегда существует булев предикат, включающий совместно используемые переменные, связанные с каждым условием, ожидают, который верен, если поток должен продолжиться. Могут произойти побочные пробуждения от pthread_cond_timedwait () или pthread_cond_wait () функции. Так как возврат из pthread_cond_timedwait () или pthread_cond_wait () ничего не подразумевает о значении этого предиката, предикат должен быть переоценен по такому возврату.