1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
// Test that vtkLogger::GetThreadName is unaffected by concurrent accesses
// and usage of vtkLogger::Init()
#include "vtkLogger.h"
#include <atomic>
#include <string>
#include <thread>
// Control the order of operations between the threads
static std::atomic_bool wait1;
static std::atomic_bool wait2;
void Thread1()
{
const std::string threaName = "T1";
while (!wait1.load())
{
}
vtkLogger::SetThreadName(threaName);
wait2.store(true);
if (vtkLogger::GetThreadName() != threaName)
{
vtkLogF(ERROR, "Name mismatch !");
}
}
void Thread2()
{
const std::string threaName = "T2";
vtkLogger::SetThreadName(threaName);
wait1.store(true);
while (!wait2.load())
{
}
vtkLogger::Init();
if (vtkLogger::GetThreadName() != threaName)
{
vtkLogF(ERROR, "Name mismatch !");
}
}
int TestLoggerThreadName(int, char*[])
{
wait1.store(false);
wait2.store(false);
std::thread t1(Thread1);
std::thread t2(Thread2);
t1.join();
t2.join();
return EXIT_SUCCESS;
}
|