From 6ee83009433498a65216dfd2d1dc94a21bd5d3b5 Mon Sep 17 00:00:00 2001 From: Philippe Rzetelski Date: Wed, 17 Nov 2021 20:25:57 +1030 Subject: [PATCH 1/4] Folder structure set up and an about --- .../Parallel and Concurrent Programming with C++/About.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 MultiThreading/Parallel and Concurrent Programming with C++/About.md diff --git a/MultiThreading/Parallel and Concurrent Programming with C++/About.md b/MultiThreading/Parallel and Concurrent Programming with C++/About.md new file mode 100644 index 0000000..7be545f --- /dev/null +++ b/MultiThreading/Parallel and Concurrent Programming with C++/About.md @@ -0,0 +1,4 @@ +https://www.linkedin.com/learning/parallel-and-concurrent-programming-with-c-plus-plus-part-1 +https://www.linkedin.com/learning/parallel-and-concurrent-programming-with-c-plus-plus-part-2 + +Following and implementing ^, with own modifications/deviations where I want to explore more/do something different. From 092cde0372293512c9b52ca154923a3f1f28d996 Mon Sep 17 00:00:00 2001 From: Philippe Rzetelski Date: Wed, 17 Nov 2021 20:57:29 +1030 Subject: [PATCH 2/4] Initial VS setup with single thread process --- .../ParallelConcurrentCpp_1.vcxproj | 147 ++++++++++++++++++ .../ParallelConcurrentCpp_1.vcxproj.filters | 22 +++ .../ParallelConcurrentCpp_1.vcxproj.user | 4 + .../Part1/ParallelConcurrentCpp_1/Source.cpp | 23 +++ 4 files changed, 196 insertions(+) create mode 100644 MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj create mode 100644 MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.filters create mode 100644 MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.user create mode 100644 MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp diff --git a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj new file mode 100644 index 0000000..c1e1e6a --- /dev/null +++ b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj @@ -0,0 +1,147 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {4b21298c-6b13-4a70-a0e1-eed094d655be} + ParallelConcurrentCpp1 + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + \ No newline at end of file diff --git a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.filters b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.filters new file mode 100644 index 0000000..3e7e62e --- /dev/null +++ b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Source Files + + + \ No newline at end of file diff --git a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.user b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/ParallelConcurrentCpp_1.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp new file mode 100644 index 0000000..a51d97b --- /dev/null +++ b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp @@ -0,0 +1,23 @@ +#include +#include +#include + +void CPU_Waster(int* pid) +{ + + printf("CPU Waster Process ID: %d\n", _getpid()); + *pid = _getpid(); + + +} + +int main() +{ + int main_process_pid = _getpid(); + printf("Main Process ID: %d\n", main_process_pid); + + int cpu_waster_pid = 0; + CPU_Waster(&cpu_waster_pid); + assert(cpu_waster_pid == main_process_pid); + return 0; +} From 952c4271bb045ef9039f3dce6115a37a78433f63 Mon Sep 17 00:00:00 2001 From: Philippe Rzetelski Date: Wed, 17 Nov 2021 21:07:28 +1030 Subject: [PATCH 3/4] Single threaded process showing different thread and process id Run it to see (could not assert as could not cast from std::thread::id to int). --- .../Part1/ParallelConcurrentCpp_1/Source.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp index a51d97b..7cee3da 100644 --- a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp +++ b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp @@ -2,22 +2,29 @@ #include #include -void CPU_Waster(int* pid) +void CPU_Waster(int* pid, std::thread::id* tid) { printf("CPU Waster Process ID: %d\n", _getpid()); + printf("CPU Waster Thread ID: %d\n", std::this_thread::get_id()); *pid = _getpid(); - - + *tid = std::this_thread::get_id(); } int main() { int main_process_pid = _getpid(); + std::thread::id main_tid = std::this_thread::get_id(); printf("Main Process ID: %d\n", main_process_pid); + printf("Main Thread ID: %d\n", main_tid); int cpu_waster_pid = 0; - CPU_Waster(&cpu_waster_pid); + std::thread::id cpu_waster_tid; + CPU_Waster(&cpu_waster_pid, &cpu_waster_tid); + assert(cpu_waster_pid == main_process_pid); + assert(cpu_waster_tid == main_tid); + + return 0; } From 8b03a7cd2068ea1e8c8528b873706f77efb1e7ee Mon Sep 17 00:00:00 2001 From: Philippe Rzetelski Date: Wed, 17 Nov 2021 21:50:39 +1030 Subject: [PATCH 4/4] Multithreaded process --- .../Part1/ParallelConcurrentCpp_1/Source.cpp | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp index 7cee3da..a07b3df 100644 --- a/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp +++ b/MultiThreading/Parallel and Concurrent Programming with C++/Part1/ParallelConcurrentCpp_1/Source.cpp @@ -1,7 +1,7 @@ #include #include #include - +#include void CPU_Waster(int* pid, std::thread::id* tid) { @@ -9,6 +9,16 @@ void CPU_Waster(int* pid, std::thread::id* tid) printf("CPU Waster Thread ID: %d\n", std::this_thread::get_id()); *pid = _getpid(); *tid = std::this_thread::get_id(); + +} + +void CPU_Waster() +{ + + printf("CPU Waster Process ID: %d\n", _getpid()); + printf("CPU Waster Thread ID: %d\n", std::this_thread::get_id()); + + while (1); } int main() @@ -24,7 +34,15 @@ int main() assert(cpu_waster_pid == main_process_pid); assert(cpu_waster_tid == main_tid); - + + void (*CPU_WasterPtr)() = &CPU_Waster; + std::thread thread1(CPU_WasterPtr); + std::thread thread2(CPU_WasterPtr); + + while (1) + std::this_thread::sleep_for(std::chrono::seconds(1)); + + return 0; }