스레딩을 사용하여 값을 재귀 적으로 전달하려고합니다.
내 예에서는 스레드를 만들고 일부 데이터를 전달하고이 스레드는 또 다른 스레드를 재귀 적으로 생성하여 일부 데이터를 전달합니다.
출력은 다음과 같습니다.
Thread 1: value = 8
Thread 2: value = 12318230
값 4를 할당했지만 두 번째 스레드에 대해 값 4를 얻지 못하는 이유는 무엇입니까?
내 이해에서 (내가 틀렸다면 수정하십시오) 각 스레드에는 자체 스택이 있습니다. 값 4를 Thread 2 (첫 번째 스레드가 만든 스레드)에 전달하면 스레드가 끝날 때까지 변수가 메모리에 있습니다. pthread_join에 대한 호출이 있으므로 다시 시작할 때까지 자식 스레드가 끝날 때까지 기다립니다. Thread 2의 값이 왜 난수인지 확실하지 않습니다.
int count = 0
typedef struct
{
int value;
} ThreadInfo;
void* ChildWork(void* a) {
pthread_t threadid;
count++;
if(count > 2)
pthread_exit(0);
ThreadInfo* info = (ThreadInfo*)a;
printf("value = %d\n", info->value);
ThreadInfo* child = new ThreadInfo;
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);
pthread_join(threadid, NULL);
pthread_exit(0);
}
int main(int argc, const char *argv[])
{
pthread_t threadid;
ThreadInfo info;
info.value = 8;
pthread_create(&threadid, NULL, ChildWork, (void*)&info);
pthread_join(threadid, NULL);
return 0;
}
ThreadInfo* child = new ThreadInfo;
child->value = 4;
pthread_create(&threadid, NULL, ChildWork, (void*)&child);
& child는 a ThreadInfo**
이지만 자식 스레드 는 a로 캐스팅하고 ThreadInfo*
쓰레기를 읽습니다. 변경 (void*)&child
단지에 child
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다