[ 
https://issues.apache.org/jira/browse/IGNITE-1439?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15973180#comment-15973180
 ] 

Igor Sapego commented on IGNITE-1439:
-------------------------------------

Implemented prototype for Windows. As we have to support Windows XP I can't use 
Condition Variables 
(https://msdn.microsoft.com/en-us/library/windows/desktop/ms682052(v=vs.85).aspx),
 which would be perfect for cross-platform solution. So instead I used 
Manual-reset Event objects 
(https://msdn.microsoft.com/en-us/library/windows/desktop/ms682655(v=vs.85).aspx)
 and critical sections. Current implementation seems to be correct though I 
have not tested it properly yet.

Some details of current implementation:
To create {{Future}} one needs to first create {{Promise}} object. {{Promise}} 
is object which used to set value or error for the linked {{Future}} objects.
Once {{Promise}} created, one can call {{Promise::GetFuture()}} to get instance 
of related {{Future}} object. There may be unlimited number of futures for 
every {{Promise}}. {{Promise}} can't be copied though. Error or value can be 
set only once for the {{Promise}}. If someone tries to set value or error to a 
set {{Promise}} this will result in exception. If {{Promise}} instance gets 
destructed before any value or error has been set error is automatically set 
for all linked {{Future}} objects.

On any {{Future}} object user can call either {{Wait}}, {{WaitFor}} or {{Get}} 
methods. All these methods are blocking. If {{Get}} called on future for which 
error has been set this will result in exception.

Obviously enough, {{Future}} class is a part of public API, while {{Promise}} 
is internal class.

> CPP: Implement futures.
> -----------------------
>
>                 Key: IGNITE-1439
>                 URL: https://issues.apache.org/jira/browse/IGNITE-1439
>             Project: Ignite
>          Issue Type: Task
>          Components: platforms
>    Affects Versions: 1.1.4
>            Reporter: Vladimir Ozerov
>            Assignee: Igor Sapego
>              Labels: cpp
>             Fix For: 2.1
>
>




--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to