std::vector
'수신기'를보고 크기가 receivers.size()
인 배열에 넣고 수신 동작을 완료 한 요소의 배열에서 인덱스를 반환하는 MPI_Waitany
을 실행하는 '수신기'스레드가 있습니다. .std :: vector에서 작동하는 다중 스레드 :이 경우 잠금이 필요합니까?
다음을 통해 수신기 벡터에서 지워집니다 완료 요소 :를 통해
receivers.erase(receivers.begin() + completed_index);
그러나, 다른 스레드가 벌어지고있는이 하다니 '수신기'벡터에 요소를 밀어 수 :
receivers.push_back(receiver_message);
이 위험한가요? 추가 요소로 인해 C++에서 벡터의 크기를 조정하게되면 이터레이터는 무효가 될 수 있습니다. 그러나 지우기의 반복자가 단일 지점에서 발생하여 버려지기 때문에 그 목적이 원자 적 조작이 아닌가?
잠금이 필요한 경우 요소의 모든 요소에 액세스 할 때마다 벡터를 잠글 필요가 있습니까? 예 :
MPI_Start(&(receivers.at(0)->request));
요소 0이 절대로 변경 되더라도 잠금이 필요합니까?
감사
http://stackoverflow.com/questions/4346742/stl-vector-and-thread-safety – timrau