Skip to content

Commit 5a9f753

Browse files
committedApr 11, 2021
C++17 Threading
Signed-off-by: ykhan <[email protected]>
1 parent c23c4da commit 5a9f753

File tree

6 files changed

+309
-0
lines changed

6 files changed

+309
-0
lines changed
 

‎Threading/.cproject

+134
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
3+
<storageModule moduleId="org.eclipse.cdt.core.settings">
4+
<cconfiguration id="cdt.managedbuild.config.gnu.exe.debug.758897142">
5+
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.debug.758897142" moduleId="org.eclipse.cdt.core.settings" name="Debug">
6+
<externalSettings/>
7+
<extensions>
8+
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
9+
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
10+
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
11+
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
12+
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
13+
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
14+
</extensions>
15+
</storageModule>
16+
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
17+
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.debug.758897142" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="cdt.managedbuild.config.gnu.exe.debug">
18+
<folderInfo id="cdt.managedbuild.config.gnu.exe.debug.758897142." name="/" resourcePath="">
19+
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.debug.1030552963" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.debug">
20+
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.debug.1252673796" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.debug"/>
21+
<builder buildPath="${workspace_loc:/Threading}/Debug" id="cdt.managedbuild.target.gnu.builder.exe.debug.1776084331" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.debug"/>
22+
<tool id="cdt.managedbuild.tool.gnu.archiver.base.127088989" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
23+
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.275032769" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug">
24+
<option id="gnu.cpp.compiler.exe.debug.option.optimization.level.1721339238" name="Optimization Level" superClass="gnu.cpp.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.none" valueType="enumerated"/>
25+
<option defaultValue="gnu.cpp.compiler.debugging.level.max" id="gnu.cpp.compiler.exe.debug.option.debugging.level.1361089125" name="Debug Level" superClass="gnu.cpp.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
26+
<option id="gnu.cpp.compiler.option.other.other.627067066" name="Other flags" superClass="gnu.cpp.compiler.option.other.other" useByScannerDiscovery="false" value="-c -fmessage-length=0 " valueType="string"/>
27+
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1635781498" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
28+
</tool>
29+
<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1707987225" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.debug">
30+
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.exe.debug.option.optimization.level.1395855934" name="Optimization Level" superClass="gnu.c.compiler.exe.debug.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
31+
<option defaultValue="gnu.c.debugging.level.max" id="gnu.c.compiler.exe.debug.option.debugging.level.614533559" name="Debug Level" superClass="gnu.c.compiler.exe.debug.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
32+
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1689721699" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
33+
</tool>
34+
<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.debug.2115350794" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.debug"/>
35+
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug.757536086" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.debug">
36+
<option id="gnu.cpp.link.option.flags.1876088855" superClass="gnu.cpp.link.option.flags" useByScannerDiscovery="false" value="-pthread" valueType="string"/>
37+
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.1749795048" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
38+
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
39+
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
40+
</inputType>
41+
</tool>
42+
<tool id="cdt.managedbuild.tool.gnu.assembler.exe.debug.1466670391" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.debug">
43+
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.300562176" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
44+
</tool>
45+
</toolChain>
46+
</folderInfo>
47+
<sourceEntries>
48+
<entry excluding="src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
49+
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
50+
</sourceEntries>
51+
</configuration>
52+
</storageModule>
53+
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
54+
</cconfiguration>
55+
<cconfiguration id="cdt.managedbuild.config.gnu.exe.release.226196580">
56+
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="cdt.managedbuild.config.gnu.exe.release.226196580" moduleId="org.eclipse.cdt.core.settings" name="Release">
57+
<externalSettings/>
58+
<extensions>
59+
<extension id="org.eclipse.cdt.core.GNU_ELF" point="org.eclipse.cdt.core.BinaryParser"/>
60+
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
61+
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
62+
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
63+
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
64+
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
65+
</extensions>
66+
</storageModule>
67+
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
68+
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="cdt.managedbuild.config.gnu.exe.release.226196580" name="Release" optionalBuildProperties="" parent="cdt.managedbuild.config.gnu.exe.release">
69+
<folderInfo id="cdt.managedbuild.config.gnu.exe.release.226196580." name="/" resourcePath="">
70+
<toolChain id="cdt.managedbuild.toolchain.gnu.exe.release.2143874536" name="Linux GCC" superClass="cdt.managedbuild.toolchain.gnu.exe.release">
71+
<targetPlatform id="cdt.managedbuild.target.gnu.platform.exe.release.1184299950" name="Debug Platform" superClass="cdt.managedbuild.target.gnu.platform.exe.release"/>
72+
<builder buildPath="${workspace_loc:/Threading}/Release" id="cdt.managedbuild.target.gnu.builder.exe.release.433648707" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="cdt.managedbuild.target.gnu.builder.exe.release"/>
73+
<tool id="cdt.managedbuild.tool.gnu.archiver.base.1657159657" name="GCC Archiver" superClass="cdt.managedbuild.tool.gnu.archiver.base"/>
74+
<tool id="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.474014507" name="GCC C++ Compiler" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.exe.release">
75+
<option id="gnu.cpp.compiler.exe.release.option.optimization.level.2062569545" name="Optimization Level" superClass="gnu.cpp.compiler.exe.release.option.optimization.level" useByScannerDiscovery="false" value="gnu.cpp.compiler.optimization.level.most" valueType="enumerated"/>
76+
<option defaultValue="gnu.cpp.compiler.debugging.level.none" id="gnu.cpp.compiler.exe.release.option.debugging.level.1133764832" name="Debug Level" superClass="gnu.cpp.compiler.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
77+
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.284113899" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
78+
</tool>
79+
<tool id="cdt.managedbuild.tool.gnu.c.compiler.exe.release.1366031107" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.exe.release">
80+
<option defaultValue="gnu.c.optimization.level.most" id="gnu.c.compiler.exe.release.option.optimization.level.1685618714" name="Optimization Level" superClass="gnu.c.compiler.exe.release.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
81+
<option defaultValue="gnu.c.debugging.level.none" id="gnu.c.compiler.exe.release.option.debugging.level.691342021" name="Debug Level" superClass="gnu.c.compiler.exe.release.option.debugging.level" useByScannerDiscovery="false" valueType="enumerated"/>
82+
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.744105623" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
83+
</tool>
84+
<tool id="cdt.managedbuild.tool.gnu.c.linker.exe.release.1390930505" name="GCC C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.exe.release"/>
85+
<tool id="cdt.managedbuild.tool.gnu.cpp.linker.exe.release.1802019644" name="GCC C++ Linker" superClass="cdt.managedbuild.tool.gnu.cpp.linker.exe.release">
86+
<inputType id="cdt.managedbuild.tool.gnu.cpp.linker.input.443203127" superClass="cdt.managedbuild.tool.gnu.cpp.linker.input">
87+
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
88+
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
89+
</inputType>
90+
</tool>
91+
<tool id="cdt.managedbuild.tool.gnu.assembler.exe.release.1886096569" name="GCC Assembler" superClass="cdt.managedbuild.tool.gnu.assembler.exe.release">
92+
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.435181783" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
93+
</tool>
94+
</toolChain>
95+
</folderInfo>
96+
<sourceEntries>
97+
<entry excluding="src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
98+
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
99+
</sourceEntries>
100+
</configuration>
101+
</storageModule>
102+
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
103+
</cconfiguration>
104+
</storageModule>
105+
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
106+
<project id="Threading.cdt.managedbuild.target.gnu.exe.857928722" name="Executable" projectType="cdt.managedbuild.target.gnu.exe"/>
107+
</storageModule>
108+
<storageModule moduleId="scannerConfiguration">
109+
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
110+
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.758897142;cdt.managedbuild.config.gnu.exe.debug.758897142.;cdt.managedbuild.tool.gnu.c.compiler.exe.debug.1707987225;cdt.managedbuild.tool.gnu.c.compiler.input.1689721699">
111+
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
112+
</scannerConfigBuildInfo>
113+
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.debug.758897142;cdt.managedbuild.config.gnu.exe.debug.758897142.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.debug.275032769;cdt.managedbuild.tool.gnu.cpp.compiler.input.1635781498">
114+
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
115+
</scannerConfigBuildInfo>
116+
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.226196580;cdt.managedbuild.config.gnu.exe.release.226196580.;cdt.managedbuild.tool.gnu.cpp.compiler.exe.release.474014507;cdt.managedbuild.tool.gnu.cpp.compiler.input.284113899">
117+
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
118+
</scannerConfigBuildInfo>
119+
<scannerConfigBuildInfo instanceId="cdt.managedbuild.config.gnu.exe.release.226196580;cdt.managedbuild.config.gnu.exe.release.226196580.;cdt.managedbuild.tool.gnu.c.compiler.exe.release.1366031107;cdt.managedbuild.tool.gnu.c.compiler.input.744105623">
120+
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
121+
</scannerConfigBuildInfo>
122+
</storageModule>
123+
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
124+
<storageModule moduleId="refreshScope" versionNumber="2">
125+
<configuration configurationName="Debug">
126+
<resource resourceType="PROJECT" workspacePath="/Threading"/>
127+
</configuration>
128+
<configuration configurationName="Release">
129+
<resource resourceType="PROJECT" workspacePath="/Threading"/>
130+
</configuration>
131+
</storageModule>
132+
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
133+
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
134+
</cproject>

‎Threading/.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
/Debug/

‎Threading/.project

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>Threading</name>
4+
<comment></comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
10+
<triggers>clean,full,incremental,</triggers>
11+
<arguments>
12+
</arguments>
13+
</buildCommand>
14+
<buildCommand>
15+
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
16+
<triggers>full,incremental,</triggers>
17+
<arguments>
18+
</arguments>
19+
</buildCommand>
20+
</buildSpec>
21+
<natures>
22+
<nature>org.eclipse.cdt.core.cnature</nature>
23+
<nature>org.eclipse.cdt.core.ccnature</nature>
24+
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
25+
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
26+
</natures>
27+
</projectDescription>
+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<project>
3+
<configuration id="cdt.managedbuild.config.gnu.exe.debug.758897142" name="Debug">
4+
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
5+
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
6+
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
7+
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
8+
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-491375104338413693" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
9+
<language-scope id="org.eclipse.cdt.core.gcc"/>
10+
<language-scope id="org.eclipse.cdt.core.g++"/>
11+
</provider>
12+
</extension>
13+
</configuration>
14+
<configuration id="cdt.managedbuild.config.gnu.exe.release.226196580" name="Release">
15+
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
16+
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
17+
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
18+
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
19+
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="-491375104338413693" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
20+
<language-scope id="org.eclipse.cdt.core.gcc"/>
21+
<language-scope id="org.eclipse.cdt.core.g++"/>
22+
</provider>
23+
</extension>
24+
</configuration>
25+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
doxygen/doxygen_new_line_after_brief=true
2+
doxygen/doxygen_use_brief_tag=false
3+
doxygen/doxygen_use_javadoc_tags=true
4+
doxygen/doxygen_use_pre_tag=false
5+
doxygen/doxygen_use_structural_commands=false
6+
eclipse.preferences.version=1

‎Threading/src/main.cpp

+116
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
/*
2+
* main.cpp
3+
*
4+
* Created on: 5 Apr 2021
5+
* Author: ykhan
6+
*/
7+
8+
#include <thread>
9+
#include <mutex>
10+
#include <iostream>
11+
#include <future>
12+
13+
using namespace std;
14+
15+
std::mutex console;
16+
17+
void thread_fn(int &counter) {
18+
for (int i = 0; i < 5; i++) {
19+
counter++;
20+
std::this_thread::sleep_for(std::chrono::milliseconds(500));
21+
}
22+
23+
std::lock_guard<std::mutex> lg { console };
24+
cout << "Finished thread_fn " << endl;
25+
}
26+
27+
struct Callable {
28+
void operator()(int &counter) {
29+
for (int i = 0; i < 5; i++) {
30+
counter++;
31+
std::this_thread::sleep_for(std::chrono::milliseconds(500));
32+
}
33+
34+
std::lock_guard<std::mutex> lg { console };
35+
cout << "Finished Callable object " << endl;
36+
}
37+
};
38+
39+
void thread_concurrency() {
40+
int counter1 = 100;
41+
int counter2 = 200;
42+
int counter3 = 300;
43+
44+
cout << endl;
45+
cout << "Executing thread based concurrency test" << endl;
46+
47+
std::thread t1 { thread_fn, std::ref(counter1) };
48+
std::thread t2 { Callable { }, std::ref(counter2) };
49+
std::thread t3 { [](int &counter) {
50+
for (int i = 0; i < 5; i++) {
51+
counter++;
52+
std::this_thread::sleep_for(std::chrono::milliseconds(500));
53+
}
54+
55+
std::lock_guard<std::mutex> lg { console };
56+
cout << "Finished lambda " << endl;
57+
58+
}, std::ref(counter3) };
59+
60+
//cout << "Hardware threads: " << t1.hardware_concurrency() << endl;
61+
// same as
62+
cout << "Hardware threads: " << std::thread::hardware_concurrency() << endl;
63+
64+
std::this_thread::sleep_for(std::chrono::milliseconds(4000));
65+
std::lock_guard<std::mutex> lg { console };
66+
cout << "In main thread" << "counter1: " << counter1 << ", " << "counter2: "
67+
<< counter2 << ", " << "counter3: " << counter3 << endl;
68+
69+
t1.join();
70+
t2.join();
71+
t3.join();
72+
73+
cout << "Finished thread based concurrency test" << endl;
74+
}
75+
76+
using namespace std::chrono_literals;
77+
78+
bool do_work(std::future<bool> start) {
79+
// wait for the start command
80+
cout << "Waiting for the start command from main thread" << endl;
81+
bool go = start.get();
82+
if (go) {
83+
cout << "Start command received from main thread" << endl;
84+
std::this_thread::sleep_for(4s);
85+
return true;
86+
}
87+
88+
return false;
89+
}
90+
91+
void task_concurrency() {
92+
cout << endl;
93+
cout << "Executing task based concurrency test" << endl;
94+
95+
std::promise<bool> start;
96+
std::future<bool> result = std::async(std::launch::async, do_work, start.get_future());
97+
bool done = false;
98+
99+
std::this_thread::sleep_for(2s);
100+
101+
cout << "Main thread sending start command" << endl;
102+
start.set_value(true);
103+
104+
cout << "Main thread waiting for the result " << endl;
105+
if (result.valid())
106+
done = result.get();
107+
108+
cout << "async operation result: " << done << endl;
109+
110+
cout << "Finished task based concurrency test" << endl;
111+
}
112+
113+
int main() {
114+
thread_concurrency();
115+
task_concurrency();
116+
}

0 commit comments

Comments
 (0)
Please sign in to comment.