맞아요.'pthread'.create'정의 되 지 않 은 참조
gcc -o pthread -lpthread pthread.c
-------------------
http://yecheng110.blog.hexun.com/13030352_d.html
오늘부터 Liux 에서 C 로 다 중 스 레 드 프로그램 을 개발 하 는 것 을 배우 기 시 작 했 습 니 다.Linux 시스템 의 다 중 스 레 드 는 POSIX 스 레 드 인 터 페 이 스 를 따라 pthread 라 고 합 니 다.#include
int pthread_create(pthread_t *restrict tidp,
const pthread_attr_t *restrict attr,
void *(*start_rtn)(void),
void *restrict arg);
Returns: 0 if OK, error number on failure
C99 에 restrict 수식 지침 이 새로 추가 되 었 습 니 다.restrict 수식 지침 은 최초 로 지침 이 가리 키 는 대상 을 액세스 하 는 유일한 방법 입 니 다.두 번 째 지침 이 첫 번 째 를 기반 으로 할 때 만 대상 을 액세스 할 수 있 습 니 다.대상 에 대한 접근 은 모두 restrict 에 의 해 수 정 된 포인터 표현 식 에 한정 되 어 있 습 니 다.restrict 에서 수식 하 는 지침 은 주로 함수 형 인삼 이나 malloc()에서 분 배 된 메모리 공간 을 가리 키 는 데 사 용 됩 니 다.restrict 데이터 형식 은 프로그램의 의 미 를 바 꾸 지 않 습 니 다.컴 파일 러 가 restrict 수식 지침 을 만 드 는 것 은 액세스 대상 의 유일한 방법 이라는 가설 을 통 해 특정한 유형의 루틴 을 최적화 시 킬 수 있다.
첫 번 째 매개 변 수 는 스 레 드 식별 자 를 가리 키 는 지침 입 니 다.
두 번 째 매개 변 수 는 스 레 드 속성 을 설정 하 는 데 사 용 됩 니 다.
세 번 째 매개 변 수 는 스 레 드 실행 함수 의 시작 주소 입 니 다.
마지막 매개 변 수 는 실행 함수 의 매개 변수 입 니 다.
아래 이 프로그램 에서 우리 의 함수
thr_fn
매개 변수 가 필요 하지 않 기 때문에 마지막 매개 변 수 는 빈 포인터 로 설정 합 니 다.두 번 째 매개 변 수 는 우리 도 빈 포인터 로 설정 하면 기본 속성의 스 레 드 를 생 성 합 니 다.스 레 드 를 만 드 는 데 성공 하면 함수 가 0 으로 되 돌아 갑 니 다.0 이 아니라면 스 레 드 를 만 드 는 데 실 패 했 음 을 설명 합 니 다.흔히 볼 수 있 는 오류 반환 코드 는 EAGAIN 과 EINVAL 입 니 다.전 자 는 시스템 이 새로운 스 레 드 를 만 드 는 것 을 제한 합 니 다.예 를 들 어 스 레 드 수가 너무 많 습 니 다.후 자 는 두 번 째 매개 변수 가 대표 하 는 스 레 드 속성 값 이 불법 임 을 나타 낸다.스 레 드 를 만 드 는 데 성공 하면 새로 만 든 스 레 드 는 매개 변수 3 과 매개 변수 4 의 확실한 함 수 를 실행 하고 원래 의 스 레 드 는 다음 줄 코드 를 계속 실행 합 니 다.
#include<stdio.h>
#include<pthread.h>
#include<string.h>
#include<sys/types.h>
#include<unistd.h>
pthread_t ntid;
void printids(const char *s){
pid_t pid;
pthread_t tid;
pid = getpid();
tid = pthread_self();
printf("%s pid %u tid %u (0x%x)
",s,(unsigned int)pid,(unsigned int)tid,(unsigned
int)tid);
}
void *thr_fn(void *arg){
printids("new thread:");
return ((void *)0);
}
int main(){
int err;
err = pthread_create(&ntid,NULL,thr_fn,NULL);
if(err != 0)
{
printf("can't create thread: %s
",strerror(err));
return 1;
}
printids("main thread:");
sleep(1);
return 0;
}
APUE 2 의 프로그램 을 수정 한 후에 컴 파일 합 니 다.
결과 오류:
pthread.c:(.text+0x85): ‘pthread_create’
pthread 라 이브 러 리 는 Linux 시스템 의 기본 라 이브 러 리 가 아니 기 때문에 연결 할 때 라 이브 러 리 libpthread.a 를 사용 해 야 하기 때문에 pthread 를 사용 합 니 다.create 스 레 드 를 만 들 때 컴 파일 에-lpthread 인 자 를 추가 합 니 다:gcc -o pthread -lpthread pthread.c
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Linux Shell 프로 그래 밍 - 텍스트 처리 grep, sed사용자 가 지정 한 '모드' 에 따라 대상 텍스트 를 일치 하 게 검사 하고 일치 하 는 줄 을 인쇄 합 니 다. ##포함 되 지 않 음, 역방향 일치 \ ##키워드 앞 뒤 가 맞지 않 고 키워드 만 일치 합 니 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.