А что возвращает pthread_cond_sigmal не смотрел? По коду возврата можно понять, доставилось ли. К тому же, что-то спецификация подсказывает, что там все не так просто.. задача разбудить тред или наоборот?
Нет, не смотрел. И да, задача разбудить второй тред. Один добавляет в массив, другой уменьшает