pthread
을 처음 사용하고 있으며 포인터에 대한 포인터에 익숙하지 않습니다. 누군가 pthread_join()
의 두 번째 인수가 void **
인 이유를 설명 할 수 있습니다. 왜 이런 식으로 설계 되었습니까?pthread_join()의 두 번째 인수가 포인터 인 포인터 ** 인 이유는 무엇입니까?
int pthread_join(pthread_t thread, void **value_ptr);
pthread
을 처음 사용하고 있으며 포인터에 대한 포인터에 익숙하지 않습니다. 누군가 pthread_join()
의 두 번째 인수가 void **
인 이유를 설명 할 수 있습니다. 왜 이런 식으로 설계 되었습니까?pthread_join()의 두 번째 인수가 포인터 인 포인터 ** 인 이유는 무엇입니까?
int pthread_join(pthread_t thread, void **value_ptr);
함수의 인수를 통해 값을 반환하려면 새 값을 받기 위해 변수의 주소를 전달해야합니다. pthread_join()
로서
은 pthread_join()
사실 void**
유형의 인 void*
의 주소를 예상하는 것이다 void*
pthread_exit()
에 전달되는 포인터 값을 수용하도록 설계된다.
예 :
#include <stdlib.h> /* for EXIT_xxx macros */
#include <stdio.h> /* for printf() and perror() */
#include <pthread.h>
void * tf(void * pv)
{
int * a = pv;
size_t index = 0;
printf("tf(): a[%zu] = %d\n", index , a[0]);
++index;
pthread_exit(a + index); /* Return from tf() the address of a's 2nd element.
a + 1 here is equivalent to &a[1]. */
}
int main(void)
{
int a[2] = {42, 43};
pthread_t pt;
int result = pthread_create(&pt, NULL, tf, a); /* Pass to tf() the address of
a's 1st element. a decays to
something equivalent to &a[0]. */
if (0 != result)
{
perror("pthread_create() failed");
exit(EXIT_FAILURE);
}
{
int * pi;
size_t index = 0;
{
void * pv;
result = pthread_join(pt, &pv); /* Pass in the address of a pointer-variable to
to where the value passed to pthread_exit()
should be written. */
if (0 != result)
{
perror("pthread_join() failed);
exit(EXIT_FAILURE);
}
pi = pv;
}
++index;
printf("main(): a[%zu] = %d\n", index, pi[0]);
}
return EXIT_SUCCESS;
}
상기 인쇄 예상되는 프로그램 :
tf(): a[0] = 42
main(): a[1] = 43
많은 시간을내어 감사드립니다. –
가 pthread_exit'때문에 (보이드 RETVAL *)'와 pthread_join을()가 '실패를 통신 할 수 있어야한다. – EOF