As far as I understand, you structure looks like this
struct Data {
int one;
int two;
std::bitset<SomeType> three;
}
If you don't want to use any kind of lock for it, you can try to swap a shared pointer to this structure. Check if your compiler supports it, it's a new feature.
std::shared_ptr<Data> dataPointer;
void GUIThread()
{
...
while (true) {
auto ptr = std::atomic_load(&dataPointer);
// Read and print the content of *ptr
...
}
void workerThread()
{
...
// Do some calculation
auto newPtr = std::make_shared<Data>();
// make the new result visible to the gui thread
std::atomic_store(&dataPointer, newPtr);
}