Код: Выделить всё
class Foo
{
public:
void Increment()
{
_InterlockedIncrement(&m_value); // OSIncrementAtomic
}
long GetValue()
{
return m_value;
}
private:
long m_value;
};
Отличные статьи Джеффа Прешинга для справки: https://preshing.com/20120515/memory-re ... n-the-act/
Дополнительный контекст:
Я слежу за серией статей о программировании без блокировок и, в частности, рассматриваю использование переменной unfinishedJobs и потенциальную реализацию HasJobCompleted здесь:
https://blog.molecular-matters.com/2015 ... -1-basics/
Код: Выделить всё
void Wait(const Job* job)
{
// wait until the job has completed. in the meantime, work on any other job.
while (!HasJobCompleted(job))
{
Job* nextJob = GetJob();
if (nextJob)
{
Execute(nextJob);
}
}
}
Итак, учитывая этот контекст, потребует ли возможная реализация HasJobCompleted барьер памяти?
Подробнее здесь: https://stackoverflow.com/questions/717 ... y-modified