쓰레드에서 stl을 쓸때??
글쓴이: MackTheKnife / 작성시간: 화, 2004/01/13 - 4:58오후
g++ 2.96이고 linux (커널 2.4)에서 프로그래밍중인데
thread생성후 thread함수안에서 vector값을 가져오는 부분에서 값을 가져올수가 없읍니다.
컴파일시 -D_REENTRANT -D_PTHREADS를 줘서 컴파일 했구여
main()
{
thread생성
Pthread_join()으로 기다림
}
thread함수
{
vector<string> vtString;
vtString.push_back(string("1234"));
vtString.push_back(string("4321"));
vector<string>::iterator ptr;
ptr=vtString.begin();
while(ptr && ptr!=vtString.end()) <--여기에서 블락된채로 있음니다.
{
cout << *ptr++<< endl;
}
}Forums:


Re: 쓰레드에서 stl을 쓸때??
main() { thread생성 Pthread_join()으로 기다림 } thread함수 { vector<string> vtString; vtString.push_back(string("1234")); vtString.push_back(string("4321")); vector<string>::iterator ptr; ptr=vtString.begin(); while(ptr && ptr!=vtString.end()) <--여기에서 블락된채로 있음니다. { cout << *ptr++<< endl; } }while( ptr && ptr != vtString.end() )
요 부분을
while( *ptr && ptr != vtString.end() )
으로 바꾸면 어떨까요?
iterator를 아무 연산자 없이 평가하는 것은 안될 것 같습니다.
---
http://coolengineer.com
Re: 쓰레드에서 stl을 쓸때??
이상하군요... 제 컴에서 해 봤는데 잘 됩니다. (g++ 은 2.96, 커널도 2.4.xx <- 와우리눅스 사용중) 테스트 코드와 컴파일 옵션은 다음과 같습니다.
using namespace std; #include <iostream> #include <vector> #include <string> #include <pthread.h> void* ThreadProc(void*) { vector<string> vtString; vtString.push_back(string("1234")); vtString.push_back(string("4321")); vector<string>::iterator ptr; ptr=vtString.begin(); while ( ptr && ptr != vtString.end() ) { cout << *ptr++<< endl; } return NULL; } int main() { pthread_t myThread; pthread_attr_t thAttr; pthread_attr_init( &thAttr ); pthread_create( &myThread, &thAttr, ThreadProc, NULL ); pthread_join(myThread, NULL); }g++ -D_REENTRANT -D_PTHREADS -o testThread testThread.cxx -lpthread
실행파일 결과는 예상대로(?) 다음과 같습니다.
$ ./testThread
1234
4321
뭔가 다른 이유가 있을 듯 합니다.
댓글 달기