OpenMP: como liberar o alvo do ponteiro?

Acabei de perceber que o código a seguir não é compilado no OpenMP (no GCC 4.5.1):

struct job {
    unsigned busy_children;
};

job* j = allocateJob(…);
// …

#pragma omp flush(j->busy_children)

O compilador reclama sobre o-> na lista de argumentos para liberar, e de acordo com a especificação do OpenMP, é correto:flush espera como argumentos uma lista de "expressões id", o que basicamente significa que apenas IDs (qualificados) são permitidos, sem expressões.

Além disso, a especificação diz isso sobreflush e ponteiros:

Se um ponteiro estiver presente na lista, o ponteiro será liberado, não o bloco de memória ao qual o ponteiro se refere.

Claro. No entanto, como o OpenMP também não me permitedesreferência os ponteiros Eu basicamente não consigo liberar um apontador (alvo do ponteiro).

- E as referências? As especificações não as mencionam, mas não estou confiante de que o seguinte seja conforme e, na verdade, liberará o pontapé.

unsigned& busy_children = j->busy_children;
#pragma omp flush(busy_children)

Isso está garantido para funcionar?

Se não,como posso liberar um pontapé?

questionAnswers(3)

yourAnswerToTheQuestion