pthread사용할때...
글쓴이: lkjt / 작성시간: 월, 2004/05/24 - 5:21오후
생성시 void* 로 형변환을 해서 넘기는데요,
쓰레드 함수에서 다시 변환을 하면 보낸 값이 안나오는데.
보낸 값이 이상하게 실행할때 마다 다른데요..
이럴경우에는 어떤것들이 잘못된거죠?
지역 변수도 공유가 되나요..?
안되는걸로 아는데...
void *ThreadFunction(void *data) { const int *n = reinterpret_cast<int *>(data); FILE *fp = fopen("Result.txt", "w"); if(fp) fprintf(fp, "%d\n", *n); return NULL; } int main() { pthread_t p_thread[20]; int i; int n = 3; for(i=0;i<20;i++, n++) pthread_create(&p_thread[i], NULL, ThreadFunction, reinterpret_cast<void *>(&n)); for(i=0;i<20;i++) pthread_join(p_thread[i], NULL); }
죄송합니다.
n++가 빠졋엇네요 . :oops:
File attachments:
첨부 | 파일 크기 |
---|---|
![]() | 39.52 KB |
Forums:
뭘 보내고 어떻게 받는지, 어떻게 보내는지 등을 코드로 표현하셔야죠...
뭘 보내고 어떻게 받는지, 어떻게 보내는지 등을 코드로 표현하셔야죠...
pthread관련 질문을 마니 하시는군요..참고하시라고 적습니다.
pthread관련 질문을 마니 하시는군요..
참고하시라고 적습니다..
http://www.joinc.co.kr/modules.php?name=News&file=article&sid=118
' 형식이 내용을 규정한다. '
질문올리기전에 pthread_api보고 따라햇는데... 안되서 이
질문올리기전에 pthread_api보고 따라햇는데...
안되서 이렇게 질문 드립니다...
[code:1]int n; [/code:1]n변수가 초기화
n변수가 초기화 되지 않았습니다..
초기화 되지않은 변수에는 무슨 값이 들어갈지 알수없습니다.
' 형식이 내용을 규정한다. '
앗 먼저 답변을 다셨네요...참고로 지역변수를 공유할 수 있습니다
앗 먼저 답변을 다셨네요...
참고로 지역변수를 공유할 수 있습니다. 단 조건은 쓰레드가 사용하는 동안에도 그 지역변수가 살아있어야 합니다...
앗 설명이 부족해서 한줄 추가햇느데 그새 또 글이 :)다들 빠르시
앗 설명이 부족해서 한줄 추가햇느데 그새 또 글이 :)
다들 빠르시다..
' 형식이 내용을 규정한다. '
앗 그새 또 새글이...다들 빠르시다.. -_-; 흉내 내봤습니다
앗 그새 또 새글이...
다들 빠르시다.. -_-; 흉내 내봤습니다. (이렇게라도 빨리 승급을... ㅎㅎㅎ)
제 소스에서 도 지역변수가 공유 되나요?아니라면 어떻게 해야 공유
제 소스에서 도 지역변수가 공유 되나요?
아니라면 어떻게 해야 공유가 되죠?
n값을 초기화 시켜죠도 마찬가지네요...
pthread_create 함수의 첫번째 인자가 좀 의심스럽지 않습니까?
pthread_create 함수의 첫번째 인자가 좀 의심스럽지 않습니까?
아직 결과가 나오지 않았습니까? 성공인지 실패인지 글을 남겨주시는 것도
아직 결과가 나오지 않았습니까? 성공인지 실패인지 글을 남겨주시는 것도 좋습니다...
& 가 빠진 듯...
p.s. 빨리 빨리 승급을!!!
여전히 똑같네요 ㅠ,,,ㅠ혹시 M$윈도우에서 pthread돌리는거
여전히 똑같네요 ㅠ,,,ㅠ
혹시 M$윈도우에서 pthread돌리는거라 불안정해서 그러는건가요..?
[code:1]#include <pthread.h>#i
[liongo@green.xxx:/liongo] g++ -Wall test.c -lpthread
[liongo@green.xxx:/liongo] ./a.out
[liongo@green.xxx:/liongo] cat Result.txt
8585
이상없는데용 ㅡㅡ? 모가 문제일까..
' 형식이 내용을 규정한다. '
소스에 n 의 초기값을 아직 수정하지 않으셨네요? 수정했다고 치고...
소스에 n 의 초기값을 아직 수정하지 않으셨네요? 수정했다고 치고...
Result.txt 파일에 뭐가 담기던가요? 한 라인만 담길 듯...
p.s. 또 뒷북입니다... -_-;
결과값은...실행할때마다 결과값이 달라집니다... ( 변수 초기화
결과값은...
실행할때마다 결과값이 달라집니다... ( 변수 초기화는 일정 1로 함 )
이상합니다..
fopen, fprintf 말고 그냥 printf 해보세요. 어떻게 되나
fopen, fprintf 말고 그냥 printf 해보세요. 어떻게 되나요?
p.s. msn 대화창이 되가는 게시판...
마찬가지네요 ㅠ,ㅠ
마찬가지네요
ㅠ,ㅠ
20번 찍히는 printf 로 해도 마찬가지라구요?
20번 찍히는 printf 로 해도 마찬가지라구요?
[code:1]void *ThreadFunction(void
ㅡㅡa 왜 안되시징..
' 형식이 내용을 규정한다. '
,,,,쓰레드 20개 생성합니다.
,,,,
쓰레드 20개 생성합니다.
약간 이상하지만..pthread_create()함수 호출하고
약간 이상하지만..
pthread_create()함수 호출하고
Sleep(300)
을 주니 잘되는군요..--;;;
제생각에는,,,루프가 워낙 빠르다보니...이러는거 같군요.
제생각에는,,,
루프가 워낙 빠르다보니...
이러는거 같군요.
증가를 시켜버리면, 이상하게 넘기는게 증가되서 넘어가더군요 .ㅎ,,,
프로그래밍 경험중 이런경험은,,처음 ,,,
혹시 이런증상 나타나시면, 이렇게 해보세요.
아하,,,그런게 아니군요...이게 포인터 아닙니까?...
아하,,,
그런게 아니군요...
이게 포인터 아닙니까?...
--;;;
당연히 원 변수가 바뀌니,,,흐흐,,,
이런실수를 ㅋ...
원래 변수가 어디서 바뀐다는거죠? 올린 코드랑 테스트 코드랑 틀리다는 건
원래 변수가 어디서 바뀐다는거죠? 올린 코드랑 테스트 코드랑 틀리다는 건가요?
[code:1]const int *n = reinterpret_cast&
const int *n = reinterpret_cast<int *>(data);
포인터 아닌가요?
그게 무슨 상관인가요? 포인터를 보냈고 포인터로 받은 건데요? 출력할 때
그게 무슨 상관인가요? 포인터를 보냈고 포인터로 받은 건데요? 출력할 때는 포인터가 가리키는 곳의 값을 읽은 것 아닙니까?
왠지 동문서답한 기분이 ㅡㅡa멀뚱 멀뚱...[quote]
왠지 동문서답한 기분이 ㅡㅡa
멀뚱 멀뚱...
ㅡㅡ;;;
' 형식이 내용을 규정한다. '
pthread_create 할 때 &n 이 아니라 (&n)
pthread_create 할 때 &n 이 아니라 (&n)++ 이런식으로 했다는 말씀이네요...
결론포인터로 넘겨서 포인터로 받으려고 햇지만[b]루프가 돌면서
결론
포인터로 넘겨서 포인터로 받으려고 햇지만
루프가 돌면서 증가를 시켜 버리기 때문에포인터가 가르키는곳도 바뀌면서 같은 값이 출력되는것이엿습니다.
(이런 실수를,,,다음부턴 안해야죠 .ㅠ.)[/b]
결론..질문 올려주실때 좀 잘 체크해주시길... ㅡㅡa전
결론..
질문 올려주실때 좀 잘 체크해주시길... ㅡㅡa
전 아래만 보다가 원문이 바뀐걸 나중에 봤습니다.
원래 소스코드와 다른 코드가 올라와서 답글올리고..
답보구 원래소스를 고치고 결과가 다르고..
왠지 정신이 없군요 ㅡㅡa
' 형식이 내용을 규정한다. '
[quote="liongo"]결론..질문 올려주실때 좀 잘 체크해
댓글 달기