Будущее - это, по сути, оболочка вокруг буфера для хранения результата, флаг, указывающий, что он готов, мьютекс для защиты доступа к нему и переменная условия для ожидания.
Если вы знаетенизкоуровневые средства платформы, вы можете оптимизировать его, но это базовый набор.
Конечно, буфер должен быть распределен динамически, поэтому он может быть разделен между активным потоком объектаи ожидающий поток, и уничтожен должным образом, поэтому используйте что-то вроде ref_counted_ptr<future_data>
.
. Получение значения будет примерно таким:
DataType future_data::get() {
pthread_mutex_lock(&mut);
while(!data_ready)
pthread_cond_wait(&cond,&mut);
DataType temp=get_buffer_value();
pthread_mutex_unlock(&mut);
return temp;
}
Хотя, очевидно, вам нужно будет добавить ошибкупроверка и учет исключений.