OS가 32 bits
입니다. 내가 만든 스레드는 4G
보다 클 수있는 int 값을 반환합니다. 내 main()
함수에서이 값을 pthread_join()
까지 어떻게받을 수 있습니까? 32 bits
시스템에서 보이는 것처럼 (void *)
은 4 바이트입니다. 이와 같이Linux, C : 32 비트 OS에서 4G보다 greate 된 스레드에서 반환 값을 얻으려면 어떻게해야합니까?
#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
void* thread_function(void)
{
uint64_t nbytes = 0;
//assign values to nbytes, it could be larger than 4G.
return (void *)nbytes;
}
int main()
{
pthread_t thread_id;
uint64_t nbytes;
pthread_create (&thread_id, NULL, &thread_function, NULL);
pthread_join(thread_id,(void**)&nbytes);
}
현재 널 (NULL) arg로'& nbytes'를'pthread_create'로 보내고 단순히 함수의 주소를 통해 값을 캐스팅하고 설정하지 않으시겠습니까? – WhozCraig
우선'thread_function'은 잘못된 타입입니다. 그것은 인수를 취해야합니다. 이제 어떻게 됐을까? 이 인수를 사용하여 값을 앞뒤로 전달할 수 있습니다. 그리고'void *'리턴 타입은 실제로 포인터가 아닌 타입으로 형변환되지는 않습니다. –