thread에서 std::string을 사용할때....
글쓴이: doogie / 작성시간: 목, 2005/03/17 - 9:29오후
multi-thread 환경에서 stl을 사용해서 코딩중입니다..
그런데 보지도 듣지도 못한 에러가 나와서
골치를 썩히고 있습니다.
std::string에 value를 할당하기만 하면 죽어버립니다.
한 쓰레드내에 있는 한 클래스의 소스구요...
대략적인 코드는 이렇습니다.
std::string aa; char c; aa += c;
에러발생시의 메시지는 다음과 같습니다.
*** glibc detected *** free(): invalid pointer: 0x0000002a967b5948 ***
thread내에서의 std::string의 Copy-On-Write나
deep copy/shallow copy 문제와 관련있는것도 같은데..
정확한 원인을 찾을 수가 없습니다...
참고로 개발환경은 fedora core3에 커널 2.6.10, gcc 3.4.2입니다.
그럼 도움을 부탁드립니다.
Forums:
컴파일 가능한 예제 코드를 올려주시면 더 많은 사람들이 검토를 시도할 것
컴파일 가능한 예제 코드를 올려주시면 더 많은 사람들이 검토를 시도할 것입니다.
berise.
STL 은 멀티쓰레딩 지원 안할껄요...
STL의 코드에 동기화 루틴이 없기때문에 생기는 문제가 아닐까 합니다.
std::string 클래스는 문자열 연산을 위해 자바틱한 메모리 동적 할당을 사용할텐데요. 그 부분에서 오류가 발생하는 듯..
std::string 클래스를 상속받아 부모의 생성자와 소멸자를 뮤텍스등의 동기화 개체로써 임계영역을 잡아보시는게 어떨까 하네요.
전 STL을 안써서 잘 모르겠군요.
님ㅎ 즐~
자세한 상황을 올려주시면좋겠지만, 미약하나마 답변을 드리자면,싱글
자세한 상황을 올려주시면
좋겠지만, 미약하나마 답변을 드리자면,
싱글쓰레드로 돌려보시고,
문제없으시다면,
멀티쓰레드에서는 동기화 코드를 추가해주세요.
STL에서 동기화는 전적으로 코더가 책임져야해요.
댓글 달기