Это хороший способ проверить, нужна ли функция синхронизации потоков? ⇐ C++

Программы на C++. Форум разработчиков
Anonymous
Это хороший способ проверить, нужна ли функция синхронизации потоков?

Сообщение Anonymous »

Поскольку я не хочу платить за производительность из-за синхронизации функции между потоками, если ее будет вызывать только один поток, мне было интересно, является ли это приемлемым способом проверки:
struct MyLogger
{
static inline std::thread::id main_thread_id = std::this_thread::get_id(); // THIS CAN ONLY BE INITIALISED BY THE MAIN THREAD ON STARTUP
std::atomic_flag lock = ATOMIC_FLAG_INIT;
bool bIsCalledFromMultipleThreads = false;

void log(const char* something)
{
if (std::this_thread::get_id() != main_thread_id)
{// THEN A THREAD OTHER THAN THE MAIN THREAD IS CALLING THIS, NEED THREAD SYNCHRONISATION
bIsCalledFromMultipleThreads = true;
}

if (bIsCalledFromMultipleThreads)
{
while (lock.test_and_set());
std::cout

Подробнее здесь: https://stackoverflow.com/questions/790 ... ronisation

Вернуться в «C++»