programing

pthread_message 및 pthread_message

powerit 2023. 6. 17. 09:45
반응형

pthread_message 및 pthread_message

C 동시성 프로그래밍에 대해 질문이 있습니다.

pthread 라이브러리에서 프로토타입은pthread_join이라

int pthread_join(pthread_t tid, void **ret);

그리고 의 원형.pthread_exit다음과 같습니다.

void pthread_exit(void *ret);

그래서 나는 혼란스러워, 왜.pthread_join프로세스의 반환 값을 포인터로 사용합니다.void수집된 스레드에서 포인터, 그러나pthread_exit한 잔만 마셔도 됩니다.void종료된 스레드의 포인터?제 말은 기본적으로 모두 스레드에서 반환되는 값인데, 왜 유형에 차이가 있습니까?

pthread_exit,ret는 입력 매개 변수입니다.변수의 주소를 함수에 전달하는 것입니다.

pthread_join,ret는 출력 매개 변수입니다.함수에서 값을 반환합니다.예를 들어, 이러한 값은 다음과 같이 설정할 수 있습니다.NULL.

긴 설명:

pthread_join당신은 전달된 주소를 돌려받습니다.pthread_exit완성된 실을 기준으로일반 포인터만 전달하면 값으로 전달되므로 포인터가 가리키는 위치를 변경할 수 없습니다.pthread_join에 전달된 포인터의 값을 변경할 수 있으려면 포인터 자체, 즉 포인터로 전달되어야 합니다.

왜냐하면 매번

void pthread_exit(void *ret);

스레드 함수에서 호출되므로 pthread_message를 사용하여 포인터 패스만 반환할 수 있습니다.

지금 위치

int pthread_join(pthread_t tid, void **ret);

스레드가 생성된 곳에서 항상 호출되므로 반환된 포인터를 수락하려면 이중 포인터가 필요합니다.

나는 이 코드가 당신이 이것을 이해하는 데 도움이 될 것이라고 생각합니다.

#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>

void* thread_function(void *ignoredInThisExample)
{
    char *a = malloc(10);
    strcpy(a,"hello world");
    pthread_exit((void*)a);
}
int main()
{
    pthread_t thread_id;
    char *b;

    pthread_create (&thread_id, NULL,&thread_function, NULL);

    pthread_join(thread_id,(void**)&b); //here we are reciving one pointer 
                                        value so to use that we need double pointer 
    printf("b is %s\n",b); 
    free(b); // lets free the memory

}

일반적인 용도는 다음과 같습니다.

void* ret = NULL;
pthread_t tid = something; /// change it suitably
if (pthread_join (tid, &ret)) 
   handle_error();
// do something with the return value ret

언급URL : https://stackoverflow.com/questions/8513894/pthread-join-and-pthread-exit

반응형