<p>On re-reading your question, it appears you are asking about whether this can be done on the GPU. Yes it can, but with some very severe restrictions. CUDA harware supports atomic compare-and-swap.  There are examples in the literature of using this and other atomic instructions to implement locks and condition variables, as well as lock-free data structures.  Some reading to get you started:</p>

<ul>
<li><a href="http://arxiv.org/abs/1110.4623v1" rel="nofollow">http://arxiv.org/abs/1110.4623v1</a></li>
<li><a href="http://www.cse.chalmers.se/~bapic/lic_thesis_bapi.pdf" rel="nofollow">http://www.cse.chalmers.se/~bapic/lic_thesis_bapi.pdf</a></li>
<li><a href="http://arxiv.org/pdf/1302.2757.pdf" rel="nofollow">http://arxiv.org/pdf/1302.2757.pdf</a></li>
<li><a href="https://www.researchgate.net/publication/275603769_Toward_Concurrent_Lock-Free_Queues_on_GPUs" rel="nofollow">https://www.researchgate.net/publication/275603769_Toward_Concurrent_Lock-Free_Queues_on_GPUs</a></li>
</ul>

<p>Bottom line is: you have to roll your own implementation of futures.  Also, any waiting thread will have to spin-wait, since there's no analog of host-side yielding.</p>

<p>My original answer, with the understanding you were asking about support for futures on the host side with CUDA:</p>

<p>Yes. Recent versions of CUDA support C++11 and CUDA has supported multiple host threads for some time.  So you can wrap a CUDA kernel call with <code>std::async</code>.</p>

<p>One aspect you may want to consider is that CUDA will create a thread-local context for each thread in which CUDA functions are accessed.  Depending on the implementation of <code>std::async</code> in your C++ library, you may incur severe overhead if you end up creating a new context for each <code>std::async</code> call.</p>

<p>Finally, CUDA calls are already asynchronous, i.e. you can continue processing things on the host thread while the GPU is busy.  There can sometimes be a benefit to pipelining kernel calls.  You can also use the CUDA events API to coordinate multiple asynchronous CUDA activities within a single thread. In some sense the CUDA implementation is already doing what you are possibly proposing with <code>std::future</code>.  I would recommend first convincing yourself you cannot manage with a single host thread before venturing into multi-threaded territory, which can sometimes bring a host of non-CUDA related problems.  Hope that helps.</p>
Does CUDA offer future-like functionality?
<p>I want to create a parallel procession CUDA/C++ application that does many functional operations concurrently. I want to be able to create a thread in CUDA that acts as the hub for assigning tasks and creates futures(if at all possible) that will do time consuming mathematical calculations in parallel. Does the CUDA library support this?</p>

<p>Edit for clarification: The thread I want to act as a hub would be created on the host CPU, and the tasks that it creates and manages would be created on the GPU device. I believe it would be possible for the CPU to checking the values of thousands of futures in sequence and assigning them new tasks as they finish. If this is possible, could the answer please reference or create a specific example of how I would be able to do this.</p>