I'm trying to convert some legacy code to standard C++ and I'm having some trouble converting _InterlockedOr to std::atomic_bool (which I think is a fair equivalent):
LONG someCondition = false;
SThread_Data threadsData[COUNT];
for(int i = 0; i < COUNT; ++i)
{
threadsData[i].pSomeCondition = &someCondition;
AfxBeginThread(checkCondition, &threadsData[i]);
}
UINT checkCondition(LPVOID threadData)
{
LONG someCondition = false;
//Update someCondition to correct value
_InterlockedOr(((SThread_Data*)threadData)->pSomeCondition, someCondition);
return 1;
}
I don't see a reason for using LONG for a boolean, and I'm not even sure about the conversion from false to LONG so I thought about using bool for the condition. And since multiple threads calculate some condition, I thought that std::atomic_bool is the way to go. But I can't seem to get my head around it since I can't use std::atomic::fetch_or for std::atomic_bool.
Is there some way to convert this using bool and atomic or do I have to introduce a mutex?
Aucun commentaire:
Enregistrer un commentaire