ultimatepp/reference/CoWorkerResources/CoWorkerResources.cpp
cxl 52d5b0be15 CoWorkerResources
git-svn-id: svn://ultimatepp.org/upp/trunk@10525 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2016-12-05 22:01:32 +00:00

34 lines
746 B
C++

#include <Core/Core.h>
using namespace Upp;
struct Model { // some computation model that is not stateless, abstract definition
virtual void Start(int i) = 0;
virtual int Compute() = 0;
};
struct Model1 : Model { // concrete model (there would be more)
int n;
virtual void Start(int i) { n = i; }
virtual int Compute() { return n++; }
};
CONSOLE_APP_MAIN
{
Vector<int> data;
data.SetCount(3000);
CoWorkerResources<One<Model>> res;
for(auto& r : res)
r.Create<Model1>();
CoPartition(0, data.GetCount(), [&data, &res](int l, int h) {
Model& m = *~res; // gets resource unique for worker
m.Start(l);
for(int i = l; i < h; i++)
data[i] = m.Compute();
});
DUMP(data);
}