From 372cc475ab7946d4035e69effa64f4b6acd42042 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Tue, 12 Dec 2023 10:06:41 +0000 Subject: [PATCH] upd: made some attempts --- backend/include/bs-utility.h | 7 +++---- backend/src/bs-utility.cpp | 15 ++++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/backend/include/bs-utility.h b/backend/include/bs-utility.h index d837378..5b158fa 100644 --- a/backend/include/bs-utility.h +++ b/backend/include/bs-utility.h @@ -65,10 +65,9 @@ BlockingStringStream &BlockingStringStream::operator>>(T &val) { std::unique_lock lock(mutex); // Wait until data is available - if (!(internalStream.peek() != EOF && !is_writing)) - condition.wait(lock, [this] { - return internalStream.peek() != EOF && !is_writing; - }); + condition.wait(lock, [this] { + return internalStream.peek() != EOF && !is_writing; + }); internalStream >> val; diff --git a/backend/src/bs-utility.cpp b/backend/src/bs-utility.cpp index 2394255..d7da0d6 100644 --- a/backend/src/bs-utility.cpp +++ b/backend/src/bs-utility.cpp @@ -5,10 +5,9 @@ BlockingStringStream &BlockingStringStream::getline(std::string &str, std::unique_lock lock(mutex); // Wait until data is available - if (!(internalStream.peek() != EOF && !is_writing)) - condition.wait(lock, [this] { - return internalStream.peek() != EOF && !is_writing; - }); + condition.wait(lock, [this] { + return internalStream.peek() != EOF && !is_writing; + }); str = "$FAILED$"; std::getline(internalStream, str, delim); @@ -53,8 +52,14 @@ void debugPrint() { BookStore_ZYM::debug_Print_Mutex.unlock(); } -void BlockingStringStream::readlock() { is_writing = true; } +void BlockingStringStream::readlock() { + mutex.lock(); + is_writing = true; + mutex.unlock(); +} void BlockingStringStream::unreadlock() { + mutex.lock(); is_writing = false; + mutex.unlock(); condition.notify_all(); } \ No newline at end of file