나는 생산자 소비자 잠금없는 큐를 자세히 다음 포스트를 건너 왔어요 : 사용자가 작성한 링크 된 목록을 사용생산자 - 소비자 대기열 - std :: 대기열 또는 사용자 작성 연결 목록?
C++ Lock free producer/consumer queue
합니다. 링크리스트를 작성하는 목적은 단지 std::queue
을 사용하고 데이터 구조 주위에 접근 자 래퍼를 작성할 수있을 때 무엇입니까?
나는 생산자 소비자 잠금없는 큐를 자세히 다음 포스트를 건너 왔어요 : 사용자가 작성한 링크 된 목록을 사용생산자 - 소비자 대기열 - std :: 대기열 또는 사용자 작성 연결 목록?
C++ Lock free producer/consumer queue
합니다. 링크리스트를 작성하는 목적은 단지 std::queue
을 사용하고 데이터 구조 주위에 접근 자 래퍼를 작성할 수있을 때 무엇입니까?
std::list
을 디자인 할 수 없습니다. push_back
및 pop_front
은 모두 크기 멤버를 수정하지 않습니다. 두 스레드가 동시에 호출하면 스레드가 목록을 손상시킬 수 있습니다. 잠금을 사용하여 랩퍼 접근자를 작성하여 안전하게 만들 수 있습니다 (). 이것은 자물쇠가없는 구조의 목표를 무효화시킵니다. push_back
과 pop_front
이 모두 std::deque
인 경우 노드 포인터의 내부 "벡터"를 수정해야하며 두 개의 다른 스레드가 동시에 호출하는 경우 다시 양키를 손상시킵니다.
목록 형 또는 원형 버퍼 잠금없는 생성자/소비자 대기열을 쉽게 작성할 수 있지만 표준 C++ 컨테이너는 자격을 얻을 수 없습니다.
비 잠금 해제 데이터 구조에서 잠금없는 데이터 구조를 작성할 수 없습니다. 잠금을 사용하지 않고도 동시에 쉽게 만들 수 있습니다. – Casey
잠금없는 프로그래밍은 매우 미묘하며이를 수행하는 "빠르고 명확한 방법"이 없습니다. 그래도 진정 관심이 있다면 1 ~ 6 주 정도 주제를 연구하는 것이 좋습니다. 잘 보낸 시간이 될 것입니다. –
@Casey 이유에 대해 자세히 설명해 주시겠습니까? 나는 왜 당신이 직접 std :: queue를 사용하는 대신 자신의 데이터 구조를 작성해야만하는지에 대해 직접 대답하고 있다고 가정한다. – mezamorphic