mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 14:16:07 -06:00
.tutorial
git-svn-id: svn://ultimatepp.org/upp/trunk@13585 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
b6419836e7
commit
57201c576a
1 changed files with 13 additions and 13 deletions
|
|
@ -2,30 +2,30 @@
|
|||
|
||||
void CoLoopTutorial()
|
||||
{
|
||||
/// .CoWork loop method
|
||||
/// .CoDo
|
||||
|
||||
/// An alternative to `CoPartition` is 'loop' method of `CoWork` (`Loop` method with synonym
|
||||
/// `operator*`). In this pattern, the job is simply started in all threads and the code is
|
||||
/// responsible for scheduling the work. `Loop` / `operator*` waits for all started threads
|
||||
/// to finish. For scheduling, it is possible to use internal `CoWork` index counter,
|
||||
/// which is set to 0 at the start of `Loop` / `operator*`. This way, the overhead associated
|
||||
/// with creating lambdas and scheduling them is kept to the minimum.
|
||||
/// An alternative to `CoPartition` is `CoDo`. In this pattern, the job is simply started
|
||||
/// in all threads and the code is responsible for scheduling the work. `CoDo` waits for
|
||||
/// all started threads to finish. Scheduling is the responsibility of client code, but can
|
||||
/// be easily managed using the std::atomic counter. This way, the overhead associated with
|
||||
/// creating lambdas and scheduling them is kept to the minimum (basically the cost of
|
||||
/// atomic increment).
|
||||
|
||||
Vector<String> data;
|
||||
for(int i = 0; i < 100; i++)
|
||||
data.Add(AsString(1.0 / i));
|
||||
|
||||
double sum = 0;
|
||||
|
||||
CoWork co;
|
||||
co * [&] {
|
||||
int i;
|
||||
|
||||
std::atomic<int> ii = 0;
|
||||
|
||||
CoDo([&] {
|
||||
double m = 0;
|
||||
while((i = co.Next()) < data.GetCount())
|
||||
for(int i = ii++; i < data.GetCount(); i = ii++)
|
||||
m += atof(data[i]);
|
||||
CoWork::FinLock();
|
||||
sum += m;
|
||||
};
|
||||
});
|
||||
|
||||
DUMP(sum);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue