- int index=0;
- class foo : public jThread
- {
- public:
- void Run()
- {
- printf("foo ");
- index++;
- }
- };
- int main()
- {
- for(int i = 0; i< 10; i++){
- foo f;
- f.Start();
- //f.Join();
- }
- _getch();
- printf("index : %d",index);
- }
이걸 컴파일 해보면
??? foo가 3개밖에 없네요
실행할때마다 로또로 터져서 0개에서 8개까지 랜덤하게 나옵니다
Join을 주석해제하면 10개 모두 나오고요 왜이런거죠?
그리고 메모리 무시하고 생성을 (new foo())->Start()로 하면 확정적으로 10개 나오네요
jThread는 직접만든 스레드 클래스입니다.
자바 스레드하고 비슷하게 만들었어요.
join을 안해서 그래
3개까지 돌아고 메인에서 뒈짓해서
메인에 getch가 아래에 있는데 뒈짓! 할리가 없죠!
그리고 new로 만들면 10개 다 나온다니까욧!
조인을 왜 반복문 안에 넣었졍?
나 자바랑 c만 해보고 c++은 안해봤는데 c++에서는 생성자로 객체 생성하지 않고 선언만으로 멤버 접근이 가능해??
조인은 주석처리됬어욧
포인터 안쓴 클래스는 c에서 구조체 생각하시면 됩니다
반복문 안에 선언해놓고 계속 루프를 돌았으니 stack에서 처음에만 initialize되서 같은 인스턴스를 계속 start했다는 건데
바람직한 케이스가 아님. 쓰래드는 원래 인스턴스당 쓰레드 하나 물고 있어야 맞지.
아마 그거 관련해서 버그가 deterministic하지 않게 만들었겠지
진짜 이상하네 선언을 저기서 하는게 말이되는문법인가 루프벗어나면 액세스 뭘로함? 무슨 전역변수인감.. 쓰래드를 지역변수처럼 쓰는건 첨보네
new 쓴것도 저거 익명객체 생성하는거아님?? 무슨 쓰레드를 익명개체로 만들어 메모리폭발하겠네