2017-10-04 1 views
2

Ich versuche, ein atomares Array einer Strukturvariablen zu erstellen. Aber ich kann keinem Array-Element Werte zuweisen.Zuweisen von Werten zu einem Array von atomaren benutzerdefinierten Strukturen

struct snap { 
     int number; 
     int timestamp; 
    }; 

atomic<snap> *a_table; 

void writer(int i, int n, int t1) 
{ 
    int v, pid; 
    int t1; 
    a_table = new atomic<snap>[n]; 
    pid = i; 
    while (true) 
    { 
     v = rand() % 1000; 
     a_table[pid % n]->number = v; 
     this_thread::sleep_for(chrono::milliseconds(100 * t1)); 
    } 
} 

Die Linie a_table[pid % n]->number = v Fehler anzeigt (Ausdruck muss Zeigertyp haben) Sie

+0

a_tabelle [pid% n] .number = v; Das gibt einen Fehler std :: atomic hat keine Mitgliedsnummer – Uttaran

+0

Ok danke, ich werde mit ihm basteln und berichten, was funktioniert – Uttaran

Antwort

2

a_table[pid % n] gibt einen std::atomic<snap>, keinen Zeiger dieses Typs.

Sie können jedoch nicht tun, was Sie wollen, müssen Sie atomic::store() verwenden. So dies ändern:

a_table[pid % n]->number = v; 

dazu:

snap tmp {v, myTimestamp}; 
a_table[pid % n].store(tmp, std::memory_order_relaxed); 

PS: Weitere lesen: Wie std::atomic funktioniert.

+1

Das hat wie ein Charme funktioniert. Vielen Dank – Uttaran

Verwandte Themen