thread 와 메모리 공유.
(Posix thread)
안녕 하세요.. 쓰레드를 막 쓰다가 너무 삽질을 하고 나서...
어쨋든 결과는 냈는데 의문점이 생겨서 이렇게 질문 합니다.
Thread 를 쓸때
void *thread_func(void *arg)
이런 쓰레드 함수와 연결지어 씁니다.
pthread_create(... , thread_func, ...)
이렇게.. 그리고 thread_func 안에 다가는 thread 로 시작할
함수를 써주죠. 그래서 위에서 말한대로 코딩을 했습니다.
그리고 전역변수
Msg *head; // 메세지 큐를 만들기 위해.
Msg *tail; // head 와 tail 을 만들었습니다.
가 있었구요. 그리고 저걸 초기화 하는함수 init_message_queue를
만들었거든요. 거기 안에서 malloc(heap) 으로 할당합니다. 그런데
이 init_message_queue 가 thread_func 안에 있는 함수, 즉
thread 로 시작되는 함수에다가 넣었더니 "6번에 1번꼴"로
세그맨트 오류가 납니다. 그런데 저걸 thread_func 에 넣었더니
에러가 없어 지더군요!! -_-; 책에서 보니, 스택은 독립적으로
쓴다는데 그거랑 관련이 있는지.. Msg *head .. 등은 전역 변수라
별 상관이 없을것 같은데 말이죠. 난감 합니다 ...
참고로 swig 라는 툴로, 파이썬과 접합해서 쓰고 있는데
파이썬에서 C의 또 다른 함수를 통해 thread_func 를 부르는
방식입니다. 어떻게 이해를 해야 할까요?
조언 부탁드립니다. :-)
흠
python 과 연동하지 말고
이것저것 다 빼고
간단하게 C 로만 짜서 돌려보시죠
같은 에러가 나오는지.
역시 같은 에러가 난다면
여기다 소스를 올려주시면
문제를 찾기가 더 쉬울듯 싶습니다.
개념없는 초딩들은 좋은 말로 할때 DC나 웃대가서 놀아라. 응?
Re: thread 와 메모리 공유.
제가 잘 몰라서 그런전지... 사실 님 이야기 듣고 잘 이해가 안되네요.. 코드가 길지 않다면 같이 올려 보심이..
헛! C에서만 간추려서 해봤더니, 역시 Thread 문제군요. 아래 에러
헛! C에서만 간추려서 해봤더니, 역시 Thread 문제군요. 아래 에러나는 소스를
올립니다. main 에서 py_get_message 를 여러번 호출 하거든요.
실행 해보면. 5번에 한번 꼴로 세그맨테이션 에러가 납니다.
:-) got Linux?
뭐, 동기화 문제 같습니다만 ^^thread_func 이 실행되기
뭐, 동기화 문제 같습니다만 ^^
thread_func 이 실행되기 전에 py_get_message 가 호출되면
당연히 죽겠죠? 실제로 py_get_message 호출전에
init_msg 어쩌고 함수가 호출되게 보장하면 에러가 안날꺼 같은데요? 고운 하루되세요.
=========================
CharSyam ^^ --- 고운 하루
=========================
아!
헉! 그러니까 Thread 함수가 실행이 되고, 그 타이밍이
py_get_message 보다 앞서지 못할경우게 그렇게 되는군요.
"동기화 문제"
오.................................................................................
왜 그 생각을 못했을까-_-; init_~ 이걸 좀더 일찍 실행되게 했을때
에러가 안났던 거군요.. 만세...ㅠ_ㅠ
감사 합니다.
하나의 깨달음을 얻었습니다 :D
:-) got Linux?
[code:1]char *py_get_message(void
이것 앞 부분에..
head->next
if ( head == NULL )
검사하면 깔끔해질수 있는 건가요? ^^;
동기화 문제라는 단어에서.. 생각을 해보았네요.
잠이 들어야지만 꿈을 꿀수 있는것인가?
우리는 항상 꿈을 쫓아 가며 살아가는 사람들..
댓글 달기