[c언어] pthread.h 헤더 파일을 사용한 thread구현 질문

gyxor의 이미지

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

int sum;
void *runner(void *param);

main(int argc, char *argv[]){
pthread_t tid;
pthread_attr_t attr;
if(argc !=2){
fprintf(stderr, "usage: a.out < interger value > \n " );
exit();
}
if( atoi(argv[1]) < 0){
fprintf(stderr,"%d must be >= 0\n",atoi(argv[1]) );
exit();
}


pthread_attr_init(&attr);
pthread_create(&tid,&attr,runner,argv[1]);
pthread_join(tid,NULL);
printf("sum = %d\n",sum);

}
void *runner(void *param)
{
int upper = atoi(param);
int i;
sum = 0;
if(upper > 0){
for(i=1;i<=upper;i++)
sum += i;
}
pthread_exit(0);
}

유닉스상에서 컴파일을 해봤습니다.

> cc test.c -o test.out
ld:
Unresolved:
pthread_attr_init
__pthread_create
__pthread_join
__pthread_exit
> test.out name1
test.out: Permission denied.
>

thread구현 소스입니다.
그대로 쳐서 unix에서 컴파일후에 실행해봤습니다.
그런데 permission denied 가 나옵니다.
무엇이 잘못됐는지 모르겠습니다.
답변해주시면 부탁드립니다.

ps : 윈도우 상에서 해보려고 pthread.h파일을 찾으려고 해봤는데요..
아직 못찾았습니다. 혹시 pthread.h파일 다운받는곳 아시면 알려주시면
감사하겠습니다.

맹고이의 이미지

unix라 함은... solaris를 말하는 건가요? hp-ux?

cc test.c -o test.out -lpthread

이렇게 한 번 해보심이...

차리서의 이미지

gyxor wrote:
> cc test.c -o test.out
ld:
Unresolved:
pthread_attr_init
__pthread_create
__pthread_join
__pthread_exit
> test.out name1
test.out: Permission denied.
>


맹고이님 말씀대로 일단 '-lpthread'를 넣어주셔야겠습니다. (그런데, 이거 Linux 말고 다른 Unix에서도 마찬가지인가요?)

그리고 쉘 프롬프트에 쓰신 실행 명령을 보니 test.c를 컴파일/링크해서 나온 (안 나왔을 것 같지만 만일 나왔다고 해도) 실행 파일을 실행시키신게 아니라, 혹시 PATH에 들어있는 어떤 다른 'test.out'을 실행시키신게 아닐까 싶습니다. PATH에 '.'를 지정해두신게 아니라면 실행 권한이 없는 엉뚱한 test.out이었을 가능성이 높겠습니다.

일단 -lpthread로 컴파일하신 후 다음과 같이 './'를 붙여서 실행해보시기 바랍니다. 그리고, 테스트용 소스나 파일 이름으로 'test*'를 쓰시는 것은 별로 좋지 않을 것 같습니다. man test 해보셔요.

> vi gyxor.c
> ls
gyxor.c
> cc -o gyxor -lpthread gyxor.c
> ls
gyxor  gyxor.c
> ./gyxor 10
sum = 55
>

--
자본주의, 자유민주주의 사회에서는 결국 자유마저 돈으로 사야하나보다.
사줄테니 제발 팔기나 해다오. 아직 내가 "사겠다"고 말하는 동안에 말이다!

gyxor의 이미지

Unix OSF/1 v.4.0d 이거였습니다.

-lpthread 이 옵션 때문이었군요..
해보니 정상 실행되었습니다.
답변감사합니다.

익명 사용자의 이미지

혹시 저처럼 검색하다가 들어오신 분을 위해 덧글답니다.

윈도우즈 vc++ 에서 pthread.h 사용하는 방법이 아래 블로그에 나와있습니다.

http://taycleed.tistory.com/97

taycleed의 이미지

유입 로그 보다가 kldp가 보여서 들어와봤더니..

나중에 제가 보려고 남긴 게 도움이 되었다니 신기하네요. ㅎㅎ

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.