Sto cercando di implementare all'interno di una libreria che mette a disposizione una serie di funzioni un contatore statico che viene incrementato volta che viene richiamata una funzione. Per fare ciò ho creato una variabile static e la incremento ogni volta che avviene una chiamata. Pur compilando la libreria con target shared ottengo un comportamento strano del seguente tipo:

Dati n processi che la usano {a,b,c, ..}, e la libreria n e considerando i come contatore ottengo il seguente comportamento:

a chiama n ( i=1)
a chiama n ( i=2)
b chiama n ( i=1)
c chiama n ( i=1)
a chiama n ( i=3)

mentre mi sarei aspettato il seguente comportamento:


a chiama n (i = 1)
a chiama n (i = 2)
b chiama n (i = 3)
c chiama n (i = 4)
a chiama n (i = 5) ..

Sapete dove sto sbagliando ?