Concurrent computing: Difference between revisions

Content added Content deleted
m (Updated whitespace.)
m (Removed output as specified in task and updated whitespace.)
Line 237: Line 237:
{{works with|C++11}}
{{works with|C++11}}
The following example compiles with GCC 4.7.
The following example compiles with GCC 4.7.

<code>g++ -std=c++11 -D_GLIBCXX_USE_NANOSLEEP -o concomp concomp.cpp</code>
<code>g++ -std=c++11 -D_GLIBCXX_USE_NANOSLEEP -o concomp concomp.cpp</code>

<lang cpp>#include <thread>
<lang cpp>#include <thread>
#include <iostream>
#include <iostream>
Line 245: Line 243:
#include <random>
#include <random>
#include <chrono>
#include <chrono>
int main() {

std::random_device rd;
int main()
// mt19937 generator with a hardware random seed.
{
std::random_device rd;
std::mt19937 eng(rd());
std::uniform_int_distribution<> dist(1,1000);
std::mt19937 eng(rd()); // mt19937 generator with a hardware random seed.
std::vector<std::thread> threads;
std::uniform_int_distribution<> dist(1,1000);
for (const auto& str: {"Enjoy\n", "Rosetta\n", "Code\n"}) {
std::vector<std::thread> threads;
// between 1 and 1000ms per our distribution

std::chrono::milliseconds duration(dist(eng));
for(const auto& str: {"Enjoy\n", "Rosetta\n", "Code\n"}) {
threads.emplace_back([str, duration]() {
// between 1 and 1000ms per our distribution
std::chrono::milliseconds duration(dist(eng));
std::this_thread::sleep_for(duration);
std::cout << str;

});
threads.emplace_back([str, duration](){
}
std::this_thread::sleep_for(duration);
for(auto& t: threads)
std::cout << str;
});
t.join();
}

for(auto& t: threads) t.join();

return 0;
return 0;
}</lang>
}</lang>

Output:
<pre>Enjoy
Code
Rosetta</pre>

{{libheader|Microsoft Parallel Patterns Library (PPL)}}
{{libheader|Microsoft Parallel Patterns Library (PPL)}}

<lang cpp>#include <iostream>
<lang cpp>#include <iostream>
#include <ppl.h> // MSVC++
// MSVC++
#include <ppl.h>

void a(void) { std::cout << "Eat\n"; }
void a(void) {
void b(void) { std::cout << "At\n"; }
std::cout << "Eat\n";
}
void c(void) { std::cout << "Joe's\n"; }
void b(void) {

std::cout << "At\n";
int main()
}
{
void c(void) {
std::cout << "Joe's\n";
}
int main() {
// function pointers
// function pointers
Concurrency::parallel_invoke(&a, &b, &c);
Concurrency::parallel_invoke(&a, &b, &c);
Line 295: Line 286:
return 0;
return 0;
}</lang>
}</lang>
Output:
<pre>
Joe's
Eat
At
Enjoy
Code
Rosetta
</pre>


=={{header|Cind}}==
=={{header|Cind}}==