diff options
Diffstat (limited to 'works/life/computer-network-experiment/Output.cpp')
-rw-r--r-- | works/life/computer-network-experiment/Output.cpp | 11 |
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);
+}
|