2017-10-04 7 views
2

구조 변수의 원자 배열을 만들려고합니다. 하지만 배열 요소에 값을 할당 할 수는 없습니다.원자 사용자 정의 구조의 배열에 값 할당

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)); 
    } 
} 

라인 a_table[pid % n]->number = v에 오류가 표시되고

+0

a_table [pid % n]. 번호 = v; 이것은 std :: atomic을 오류로 만듭니다. 에는 회원 번호가 없습니다 – Uttaran

+0

감사합니다. 나는 그걸로 고치고 어떤 일을보고 할 것입니다. – Uttaran

답변

2

a_table[pid % n] 당신에게 std::atomic<snap>, 해당 유형의하지에 대한 포인터를 제공합니다 (표현 포인터 유형이 있어야합니다).

그러나 원하는대로 할 수는 없습니다. atomic::store()을 사용해야합니다. 따라서이 변경이에

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

을 :

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

PS : 더 읽기 : 어떻게 std::atomic 작품.

+1

그것은 매력처럼 작동했습니다. 고맙습니다 – Uttaran