Boost logo

Boost :

Subject: Re: [boost] Cooperative Multi-Tasking
From: Daniel Larimer (dlarimer_at_[hidden])
Date: 2010-03-07 21:51:39


On Mar 7, 2010, at 2:47 AM, Chris M. Thomasson wrote:

> "Daniel Larimer" <dlarimer_at_[hidden]> wrote in message news:A46E676B-59BA-4117-879E-7FE391255B21_at_gmail.com...
> [...]
>> Talking with my employer, I am gaining support for eventually open sourcing a lot of this! As far > as I have been able to google, I have not found any system that does what I describe above.
>
> I take it that you are not familiar with Clik++:
>
> http://software.intel.com/en-us/articles/intel-cilk
>
>
> or QuickThreads:
>
> http://www.quickthreadprogramming.com
>

Nope. And I searched just about everything I could think of to describe corporative multi-tasking and user threads. Found lots of stuff, but not those.

The intel library looks interesting in that it is the most cross platform, where as quickthreadprogramming.com mentions Windows 7 but says nothing about linux/g++.

As nice as those libraries are, they still fail to achieve my desired syntax:

struct SomeServantClass
{
        int width();
        int height();
        int calculate_area(int w, int h);
};

IDL_STUB( SomeServantClass, IDL_BASE,
        METHOD(width),
        METHOD(height),
        METHOD(calculate_area)
)

actor<SomeServantClass> a;

future<int> w = a.width();
future<int> h = a.height();
future<int> area = a.calculate_area( w, h );
future<int> area34 = a.calculate_area( 3, 4 );

Where the tasks are all "automatic" and under the hood. SomeServantClass could be ANY existing class without modification. Also, area34 would be realized before area because w and h must be evaluated before the first calculate_area can be scheduled, where as the second can be scheduled immediately instead of weight on other futures.

I suppose I could build my scheduler / active objects system upon one of those libraries. Boost.task looks the most promising from what I have seen.

I guess for what I am doing, these higher level task abstractions attempt to do "too much" and I would essentially be using them as an implementation of coroutines. I don't want my users to be thinking about threads, locks, wait conditions, yielding, scheduling, etc. I want them to operate on a much higher level.

  

  


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk