mirror of
https://github.com/sockspls/badfish
synced 2025-04-30 08:43:09 +00:00
Introduce serialization of accesses to std::cout
When many threds concurrently print you need to serialize the access to std::cout to avoid output lines are intermixed with the contents of each thread. This is not strictly needed at the moment because only main thread prints out, although some ad-hoc test could trigger UCI::loop() printing while searching. Anyhow we want to lift this pretty avoidable constrain also as a prerequisite for future work. This patch just introduces the support, next one will enable the serialization. No functional change. Signed-off-by: Marco Costalba <mcostalba@gmail.com>
This commit is contained in:
parent
3df2c01b57
commit
92e759a676
2 changed files with 24 additions and 0 deletions
17
src/misc.cpp
17
src/misc.cpp
|
@ -146,6 +146,23 @@ public:
|
|||
};
|
||||
|
||||
|
||||
/// Used to serialize access to std::cout to avoid multiple threads to write at
|
||||
/// the same time.
|
||||
|
||||
std::ostream& operator<<(std::ostream& os, SyncCout sc) {
|
||||
|
||||
static Mutex m;
|
||||
|
||||
if (sc == io_lock)
|
||||
m.lock();
|
||||
|
||||
if (sc == io_unlock)
|
||||
m.unlock();
|
||||
|
||||
return os;
|
||||
}
|
||||
|
||||
|
||||
/// Trampoline helper to avoid moving Logger to misc.h
|
||||
void start_logger(bool b) { Logger::start(b); }
|
||||
|
||||
|
|
|
@ -65,4 +65,11 @@ private:
|
|||
std::vector<Entry> e;
|
||||
};
|
||||
|
||||
|
||||
enum SyncCout { io_lock, io_unlock };
|
||||
std::ostream& operator<<(std::ostream&, SyncCout);
|
||||
|
||||
#define sync_cout std::cout << io_lock
|
||||
#define sync_endl std::endl << io_unlock
|
||||
|
||||
#endif // !defined(MISC_H_INCLUDED)
|
||||
|
|
Loading…
Add table
Reference in a new issue