aboutsummaryrefslogtreecommitdiff
path: root/works/life/computer-network-experiment/Output.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'works/life/computer-network-experiment/Output.cpp')
-rw-r--r--works/life/computer-network-experiment/Output.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/works/life/computer-network-experiment/Output.cpp b/works/life/computer-network-experiment/Output.cpp
index 2989c98..db97e5e 100644
--- a/works/life/computer-network-experiment/Output.cpp
+++ b/works/life/computer-network-experiment/Output.cpp
@@ -2,9 +2,12 @@
#include <folly/CancellationToken.h>
+#include <mutex>
#include <ostream>
#include <type_traits>
+std::mutex m;
+
folly::MPMCQueue<Output> output_queue(100);
folly::CancellationSource cancellation_source;
@@ -44,6 +47,8 @@ void PrintOutput(const Output &output) {
void OutputThread() {
while (true) {
+ m.lock();
+
if (cancellation_source.getToken().isCancellationRequested()) {
while (true) {
Output output;
@@ -58,6 +63,8 @@ void OutputThread() {
Output output;
if (output_queue.readIfNotEmpty(output))
PrintOutput(output);
+
+ m.unlock();
}
}
@@ -65,3 +72,7 @@ void SignalAndWaitForOutputThreadStop() {
cancellation_source.requestCancellation();
output_thread.join();
}
+
+std::lock_guard<std::mutex> BlockOutputThread() {
+ return std::lock_guard<std::mutex>(m);
+}