pthread 라이브러리로 스레드를 생성하려고합니다. gcc -o -pthread 파일 file.c로 컴파일해도 괜찮습니다.런타임 오류 - POSIX 스레드
그러나 코드를 실행할 때 세그먼트 오류가 발생합니다. 문제가 무엇인지 잘 모르겠습니다. 나는 시도하고 배우기 위하여 교과서에서 주어진 부호를 실행하는 것을 시도했다 그러나 나는 지금 분실된다. 누구든지 도와 줄 수 있습니까? 코드는 아래에 있습니다. 아주 기본적입니다. 그렇지만 나를 끌어 들여주세요.
#include<stdio.h>
#include<pthread.h>
int sum;
void *runner(void *param);
int main (int argc, char *argv[])
{
pthread_t tid;
pthread_attr_t attr;
//printf("Am I here..?\n");
if (argc!=2)
{
fprintf(stderr, "usage: a.out ...\n");
return -1;
}
if (atoi(argv[1] < 0))
{
fprintf(stderr, "%d must be >= 0\n", atoi(argv[1]));
return -1;
}
pthread_attr_init(&attr);
pthread_create(&tid, &attr, runner, argv[1]);
pthread_join(tid, NULL);
printf("sum = %d\n", sum);
}
void *runner(void *param)
{
extern int sum;
int i, upper=atoi(param);
sum=0;
for(i=1; i<= upper; i++)
sum+=i;
pthread_exit(0);
}
디버거 사용 방법을 배우는 것이 좋습니다. 리눅스에서'gdb'가 선택 도구가 될 것입니다. 'gdb'를 사용했다면 조용한 짧은 시간에 쉽게이 오류를 발견했을 것입니다. – alk
또한 모든 경고를 켜기 위해'-Wall' 옵션을 사용하여 컴파일하는 것이 좋습니다. 특정 경우에는 컴파일러가 인쇄하는 경고가 핵심 코드 라인을 직접 지적했을 것입니다. 사용해보십시오. ;-) – alk