Non uso C da secoli, ma ci deve essere un modo per sincronizzare il tuo codice in modo che solo un processo o thread possa entrare in esso contemporaneamente. Qualcosa come:
int unique_index = 0;
synchronized int GetUnique() {
int i = unique_index++;
return i;
}
Assicurati che unique_index sia stato acceduto a solo da GetUnique o altro codice sincronizzato. Se viene richiamato da 10.000 thread contemporaneamente, è possibile che si verifichino dei ritardi e che occorrerebbe qualcosa di più intelligente, ma ciò dovrebbe essere fatto per cominciare.
Se questo programma deve avviarsi e fermarsi e consegnare numeri univoci ad altri programmi, devi assicurarti che GetUnique non possa fare nulla finché il programma non è scaduto e ha recuperato i suoi dati ( unique_index ) da un file o dove mai. Allo stesso modo, GetUnique dovrebbe smettere di rispondere prima che i dati siano stati salvati durante l'arresto.