2012-09-04 2 views
0

은 좋은 XMl 라이브러리입니다. 클라이언트가 UDP 멀티 캐스트 모드로 서버로부터 패킷을 수신하는 등의 네트워크 전송에서 패킷 데이터를 저장하는 데 사용합니다. 클라이언트는 하나 이상의 muticast 그룹에 참여하기 때문에 서로 다른 파일에 데이터를주고받는 다중 스레드를 만들어야합니다 (물론 파일 수는 muticast 그룹의 num과 같습니다). DoWrite (char *, size_t) 함수가있는 writeXML 클래스를 디자인합니다.멀티 스레드 TinyXMl의 데이터 쓰기 TinyXML의

같은 :

void DoWrite(char*,size_t) 
{ 
boost::unique_lock<boost::mutex> lLock(m_lock); 
lLock.lock(); 
} 

하지만 문제는 DoWrite 함수가 호출 될 때마다, 부스트는 다음과 같습니다 lock_error가 제공됩니다. 누가 나를 도울 수 있습니까? 아주 많이! 당신이 (당신이 뮤텍스에 두 번 잠금을 요구하고있다)를 수동으로 호출 할 필요가 없습니다 boost::unique_lock 통화 당신을위한 뮤텍스 전달에 lock, 사용자 코드에서 텍스트

+0

오류에 대한 질문을 게시하는 경우 항상 질문에 오류를 포함시켜야합니다. 오류를 포함하도록 질문을 편집하십시오. –

+0

그러나, 나는 변수'm_lock'이 정의되어 있지 않다고 추측합니다. 'DoWrite'는 독립 실행 형 함수이고'm_lock'은 클래스 멤버에게 전형적인 방식으로 명명됩니다. 클래스 지정자를 잊어 버렸거나 클래스에서 인라인 인 경우에는 조금 더 잘 보여줘야합니다. –

답변

1

제거 lLock.lock();을 강조했다.

unique_lock (잠금 & m)

효과 :

저장 m에 대한 참조에서 참조. m.lock()을 호출합니다. 당신이 잠금을 획득 연기하려는 경우가 아니면

또한, 대신 boost::lock_guard를 사용합니다. 자세한 내용은 documentation을 참조하십시오.

+0

예, lLock.lock()을 제거합니다. 하지만 여전히 오류가 있습니다, 아마 tinyxml libuary는 멀티 스레드 문제가 있습니다. – user909691

+1

@ user909691 : 코드 또는 오류를 볼 수 없어 표시된 코드에 대해서만 설명 할 수 있습니다. –