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
'programing' 카테고리의 다른 글
루비에서 지도(&:name)는 무엇을 의미합니까? (0) | 2023.06.17 |
---|---|
DeepL API를 사용하여 텍스트 번역 (0) | 2023.06.17 |
vuex에서 약속을 중첩하는 이유는 무엇입니까? (0) | 2023.06.17 |
-viewWillAppear:와 -viewDidAppear:의 차이점은 무엇입니까? (0) | 2023.06.17 |
문자열 길이가 0이 아닐 경우 Excel 개수 (0) | 2023.06.17 |