Я пытаюсь реализовать функцию барьера, так что, когда поток вызывает waitBarrier()
, он будет ждать, пока все остальные n
нити вызовут функцию, после чего все будет продолжаться, т. Е. конструкция синхронизации.Назначение возвращаемого значения атомной функции
я следующий код:
int i = 0; // Shared variable. Initialized as 0 at the beginning.
waitBarrier() {
// CAS = Compare-and-swap, the first argument holds "old_val" the second the new
i = CAS(i, i+1);
// Spin until all n threads (number of all threads known prior) have been "here"
while (i != n) {}
}
Если это получает доступ по n
потоков будет эту функцию работать? Является ли назначение возвращаемого значения атомной функции атомом? Или могут возникнуть условия гонки?
Если он работает, он будет работать плохо, (спинлока). –
Хорошо, предполагая, что потоки ожидают короткого времени, он должен быть довольно эффективным. – spurra
Чем больше потоков ожидает, тем меньше процессор и пропускная способность памяти останутся для остальных. –