게시자 스레드와 소비자 스레드가 있습니다. 그들은 std::stack<Data *>
을 통해 데이터를 공유합니다. 게시자는 단순히 포인터를 push()하고 소비자는 단순히 포인터를 pop()하여 사용하고 delete를 호출합니다. 한 번에 하나의 스레드 만 게시하는 단일 스레드와 포인터를 사용하는 하나의 스레드가 있으므로 스택을 동기화 할 필요가 있습니까? 스택은 포인터 만 저장한다는 것을 명심하십시오. 데이터()가 완전히 생성 된 경우에만 게시자가 포인터를 누릅니다.게시자와 소비자 스레드간에 스택을 통한 데이터 공유
0
A
답변
3
std
네임 스페이스에있는 const
컨테이너의 메서드에서 동기화하지 않으면 정의되지 않은 동작입니다.
push
도 아니요 pop
도 stack
의 기본 컨테이너에 const
이 아닙니다. 따라서 두 스레드는 모두 stack
의 기본 컨테이너 상태에 쓰고 있습니다.
그것에 대해 생각하는 방법은 두 가지 모두 최소한 stack
의 요소 수를 헤아릴 필요가 있다는 것입니다. 하나는 증가시키고 다른 하나는 줄이려고합니다. 그것. (다른 문제가 있지만, 두 사람 모두 stack
상태로 쓰고 있음을 확신해야합니다.)
1
std::stack<Data*>
인스턴스는 하나 개 이상의 스레드로 동기화 접속 (pop()
및 push()
통해)을 수정할 수 있지만 같은 하나의 스레드 만은 어느 하나의 요소에 작동 가능하지 그 안에 포함 된 구성 요소가 필요합니다 시각.
1
예, std::stack
클래스는 모든 작업이 원자이며이 push()
, top()
및 pop()
가 인터리브 것, 가능하다는 것을 보장하지 않기 때문에, 스택에 대한 액세스를 동기화 할 필요가있다.
관련 문제
- 1. 자바 스레드간에 데이터 공유
- 2. Qt 스레드간에 데이터 공유
- 3. blockingqueues 질문을 사용하여 스레드간에 데이터 공유
- 4. 스레드간에 CUDA 공유 객체
- 5. 스레드간에 개체 공유
- 6. 파이썬 : 스레드간에 목록 공유
- 7. Java 스레드간에 공유 버퍼를 구현하는 방법은 무엇입니까?
- 8. 두 스레드간에 QAxObject를 공유 하시겠습니까?
- 9. 녹에서 스레드간에 잠금없는 리소스 공유
- 10. C# 스레드간에 파일 핸들링 공유
- 11. C 전역 정적 - 스레드간에 공유?
- 12. 파이썬 스레드간에 공유 변수 만들기
- 13. 스레드간에 파이썬 공유 파일 액세스
- 14. 스레드간에 공유 리소스 재 설정
- 15. C++ - 스레드간에 데이터 전달
- 16. 스레드간에 데이터 전달
- 17. Sip을 통한 파일 공유
- 18. mysql을 통한 생산자/소비자 패턴
- 19. WDM 장치 스택을 통한 반복
- 20. Spring MVC 컨트롤러 메소드를 통한 데이터 공유
- 21. 준비된 문이 스레드간에 공유 될 수 있습니까?
- 22. 일부 스레드간에 변수를 공유 할 수 있습니까?
- 23. 스레드간에 공유 구조에 대한 액세스 제어를 사용해야합니까?
- 24. 어떻게 스레드간에 데이터를 공유 할 수 있습니까?
- 25. ThreadPool 스레드간에 gevent 잠금/세마포를 공유 하시겠습니까?
- 26. CUDA 스레드간에 매우 불규칙한 작업 공유
- 27. C# 및 WCF의 스레드간에 개체 공유
- 28. egl - 스레드간에 컨텍스트를 공유 할 수 있습니까?
- 29. JMeter. 스레드간에 동기화 데이터 동기화
- 30. C를 사용하여 스레드간에 데이터 전달
예, 동기화해야합니다. 'push()'와'pop()'은 원 자성 연산이 아닙니다. – juanchopanza