thread내 에서 malloc 문제...
글쓴이: mraj / 작성시간: 화, 2006/12/05 - 1:35오후
리눅스 소켓 프로그램에 재미를 붙여 열심히 공부중인 초보잡니다...
간단한 채팅을 토대로 조금씩 살을 붙여가는 재미로 만들어가고 있는데
막히는 부분이 있어서 질문드립니다.
구현 하고자 하는 부분은 채팅가입자 관리 입니다.
일단 가입하면 MySQL에 저장 합니다.
그리고 전체 가입자를 불러와서 클라이언트에 목록을 생성할려고 하는부분에서 막히네요..
쓰레드 내에서 MySQL select 한 모든 값을 그냥 하나의 문자열로 쭉 붙여서 클라이언트로
보내면 클라이언트에서 파싱해서 보여줄려고 합니다.
paData = (char*)malloc(필드수);
while(mysql_fetch_object())
{
for(필드수){
strncat(paData, row[i], sizeof(row[i]);
}
}
이런식으로 집어넣어서 보내줄려고 합니다.
여기서 문제점이 생기네요...
쓰레드내에서는 malloc 해버리면 heap으로 가버리서 쓰레드 끼리
공유가 되버려서 메모리 충돌이 일어날것 같습니다.
혼자서 테스트 하는거라 당장은 문제를 안일으키지만.... 잘못된건 알겠느데..
어떻게 해결해야 하는지 궁금합니다.
그냥 전역변수로 mutex_lock 해서 사용해야 하는지 아니면 쓰레드에서 는 불가하니까
fork 로 해야 되는지 .....
많은 조언 부탁드립니다.
그리고 초보 딱지를 땔만한 서적도 추천해주시면 감사하겠습니다....
Forums:
malloc function은
malloc function은 MT-safe합니다. multi-thread에서 사용하여도 correctness에 아무 문제가 없습니다.
malloc으로 할당된
malloc으로 할당된 주소를 다른 스레드가 쓸수 있다고 보기 때문에 걱정하는 건가요? 아님 malloc을 동시에 호출할 수
있다는 것에 걱정하는 건가요? 후자라면 앞분이 말한 MT-Safe 하기 때문에 문제가 없습니다.
전자라면 paData 변수를 두 스레드에서 공유하지 않으면 문제가 될것이 없어 보입니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
malloc 하는 놈과 free
malloc 하는 놈과 free 하는 놈이 분리되는 것에 대한 고민같은데요.
list 어떻습니까 ?
댓글 달기