2014-04-14 2 views
1

다음과 같은 방법으로 스레드의 개인 데이터를 저장할 수 있는지 알아야합니다.스레드에 개인 데이터 저장

pthread_create(&threads[i], NULL, student, (void *) i); 

void *student(void *arg) { 
    int mybooks[3]; 
    int mybooks_index = 0; 

    ....... 
} 

스레드를 만들 때이 포인터가 구조체에 대한 포인터를 보내는 것만 가능합니까?

+1

'mybooks'와'mybooks_index'는 * automatic * 변수입니다. 나는 각 스레드가 자신 만의 '정적'을 만들지 않았기를 바랄 것이다. – WhozCraig

+0

그건 생각입니다. – Umut

답변

3

각 스레드는 자체 스택을 가지고 있습니다. mybooksmybooks_index은 자동 변수이므로 스택 (즉 스레드 당)에 할당됩니다. 그들은 student이 종료 될 때만 할당 해제됩니다. 그래,이게 효과가있다. static을 작성한 경우 해당 스레드에 대해 비공개가 아닌 스레드간에 공유됩니다.

2

예. 진입 점이 student 인 스폰하는 스레드는 각각 mybooksmybooks_index의 자체 복사본을가집니다. @WhozCraig가 지적한 것처럼 자동 변수입니다.

0

개인 데이터를 이와 같은 스레드에 저장한다는 것은 무엇을 의미합니까? "학생"기능에서 mybooks 배열에 액세스 할 수 있는지 묻고 있습니까? 네, 그렇게 될 것입니다. 이것은 좋은 습관입니까? 당신이 성취하고자하는 것에 달렸습니다. Book이라는 책을위한 수업을 만들 것을 제안합니다. 그런 다음 스레드의 함수 (student())에 Book 객체 유형을 전달합니다.

+0

이것은 C이며, C++이 아닌 – abligh

+0

@abligh입니다. 그런 다음 클래스 대신 struct를 사용하십시오. 같은 것. 전혀 차이가 없다. 구조체에 정의한 모든 것은 private로 클래스에있는 동안 암시 적으로 public으로 간주됩니다. private 또는 public 키워드를 클래스 또는 구조체 선언에 명시 적으로 사용하지 않는 한. – armanali

관련 문제