벡터에 값을 추가하고 방금 추가 한 값의 인덱스를 반환하는 함수를 만들어야합니다.Atomically std :: vector :: push_back() and return index
예 :
int append(std::vector<int>& numbers, int number){
int retval = numbers.size();
// what if some other thread calls push_back(number) in between these calls?
numbers.push_back(number);
return retval;
}
반환 된 인덱스가 벡터 값을 추가 여러 스레드가있을 수 있습니다 경우에도 항상 올 수 있도록 내가 원자 적으로이 일을하고 싶습니다. push_back
이 방금 추가 한 항목의 색인을 반환하면 쉽습니다. 올바른 색인이 리턴됨을 어떻게 보장 할 수 있습니까?
사실 push_back() 자체가 스레드로부터 안전하지 않으므로 push_back()이 인덱스를 반환하면 쉽지 않을 것입니다. –
모든 동시 쓰기에 대해 컨테이너를 보호해야합니다. 동시 일반 push_back()에는 이미 벡터 외부 동기화가 필요합니다. –
많은 실제 응용 프로그램에서 작은 스레드 안전 작업을 만드는 것이 올바른 해결책이 아니므로 더 큰 코드 묶음을 보호해야합니다.스레드 안전 컬렉션은 통신 메커니즘으로 사용하는 것이 좋습니다. 즉, 이것은 그러한 경우 일 수 있습니다. –