标题: [求助]pthread.h库问题
aababy
新生入学
Rank: 1
注册用户



UID 188794
精华 0
积分 0(积分有什么用?)
帖子 12
阅读权限 10
注册 2007-4-12
状态 离线
发表于 2007-8-19 15:43  资料  个人空间  短消息  加为好友 
[求助]pthread.h库问题

编写了一个多线程程序:
4FKu e$}} _G]Linux伊甸园论坛#include <unistd.h>
O3Jt6J4mv%pD
pLinux伊甸园论坛
#include <stdio.h>Linux伊甸园论坛M,^b)mV)KK
#include <pthread.h>www.linuxeden.com\4QY D:NK`%vj$h

7PCL3uNAnwww.linuxeden.compthread_key_t key;
%uW-`
q!^L?T
Linux伊甸园论坛"Hg,qSlj Q
void echomsg(int t)|.cz*qCD2M+XH
{3vVR:e(YG&W
        printf("线程退出.\n");^
]v6g5aW7|9V7a2N

        printf("destructor excuted in thread %d, param=%d\n",pthread_self(),t);
o'z6p!T(?%Tk)H~]1}u}www.linuxeden.com-ED9M~ru;tO Q/k

#Nf5iU]PrGvoid *child1(void *arg)        //为每一个线程单独建一个执行函数
I
|){"io%Syz_.J
{Linux伊甸园论坛:v5o!k)y1cFeS
        int tid=pthread_self();        //求线程id号
a D4O S z        printf("thread %d enter\n",tid);9ee+pxS4q:b1p
        pthread_setspecific(key,(void *)tid);        //将tid的值与key相关联,注意不是*tidLinux伊甸园论坛^"~y!eG/Jpe
        sleep(2);
W8mls"YAk"L

        printf("thread %d returns %d \n", tid , pthread_getspecific(key));        //读出key值,即*tid?
)P-_"{Vb`www.linuxeden.com        sleep(5);S7k9G;R        GtW6l6t3W
        "R2iC;C!{.f`
        return NULL;%Df3X$C:vr m1V
       
%S+L:W|{&D3FZ}|,I]}
L dQA,d'G+{_~"f(C
L0t_~d'g;cwww.linuxeden.comvoid *child2(void *arg)
:n~&?(c&ET4TLinux伊甸园论坛{,cu)h+X:C8S
        int tid=pthread_self();U+D+N'{9b\
        printf("thread %d enter\n",tid);www.linuxeden.com#np%gPm
L8DNZ

        pthread_setspecific(key,(void *)tid);        //将tid的值与key相关联,注意不是*tidLinux伊甸园论坛 gw
? Z{@ZF

        sleep(1);Linux伊甸园论坛/k#~7U        G'H;A*vS(G:Kv
        printf("thread %d returns %d \n", tid , pthread_getspecific(key));        //读出key值,即*tid?
)}{9N4HH(Z        sleep(5);VCs)E4s#Z
        x7P;X6`{{
        return NULL;jIA.`l`F
}
G n4v/n1TZ0\y7n
7yxd%kHq
\[1M(^E+NqgLinux伊甸园论坛int main()R$Hu"W
q!h||/w

{
%O        imr7qn)U;y,?dLinux伊甸园论坛        int tid1,tid2;        //线程号
HI` Q4GU5r        printf("hello\n");T0DKPJFZ
        pthread_key_create(&key,echomsg);        //注意在创建线程前创建私有数据,线程退出时会将key作为参数送入echomsg
7T0vc/T aLinux伊甸园论坛        pthread_create(&tid1,NULL,child1,NULL);        //创建线程,其中第一个NULL是设置线程属性,第二个NULL是child1函数的传人参数.线程的作用就是执行child1.
"G|\C?'r He'h        pthread_create(&tid2,NULL,child2,NULL);
/W3CZ8Eq8_n}www.linuxeden.com        sleep(10);#k!t^:\ws
        pthread_key_delete(key);        //释放TSD
\)x{nCUwww.linuxeden.com        printf("main thread exit\n");
;f W[[-B(aGt        Linux伊甸园论坛uW!OwK
        return 0;
m:`*n8]k;p WC%y}yb        T!fbx
mn T T


9t9B'C
Y-kn'kZZ
编译时总提示
$|
a1OizbP/i.R
/tmp/ccFXz8Ip.o(.text+0xde): In function `child2':fC`]"d#d&]
mythread.c: undefined reference to `pthread_setspecific'
H5H%}6aQx @2ho*_$Q/tmp/ccFXz8Ip.o(.text+0xfc):mythread.c: undefined reference to `pthread_getspecific'P6q*_!\@
/tmp/ccFXz8Ip.o(.text+0x166): In function `main':
.T*blD%hfJ imythread.c: undefined reference to `pthread_key_create'
If"M3i%UF'Y7v/tmp/ccFXz8Ip.o(.text+0x17b):mythread.c: undefined reference to `pthread_create'
uk5n7_%V m:}A/tmp/ccFXz8Ip.o(.text+0x190):mythread.c: undefined reference to `pthread_create'www.linuxeden.com \;mu+`+o5[ Ql
/tmp/ccFXz8Ip.o(.text+0x1ae):mythread.c: undefined reference to `pthread_key_delete'www.linuxeden.com{5b ]"Km        T

Y3zRys,~另外用gcc -Ipthread -Wall mythread.c -o mythread也没有用;c        aOJ
J$BUp9JE^


7Y6Z&?%Re;h2[$y谢谢大家.

顶部
不容错过的IBM 集群技术资源汇总
dearvoid
版主
Rank: 7Rank: 7Rank: 7
Clark J. Wang



UID 26605
精华 26
积分 61(积分有什么用?)
帖子 4814
阅读权限 100
注册 2002-10-12
来自 Beijing, China
状态 离线
发表于 2007-8-19 17:18  资料  个人空间  短消息  加为好友 
gcc file.c -lpthread ... ?





'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间
顶部
不容错过的IBM 集群技术资源汇总
aababy
新生入学
Rank: 1
注册用户



UID 188794
精华 0
积分 0(积分有什么用?)
帖子 12
阅读权限 10
注册 2007-4-12
状态 离线
发表于 2007-8-20 14:40  资料  个人空间  短消息  加为好友 
谢谢dearvoid,用你提供的命令能通过.www.linuxeden.comuF3cy;|$k ADl
Linux伊甸园论坛cI2B;EJ7[ ^{
还有点小问题:
J8ma"E0n;fu/W1wW编译仍然有警告:www.linuxeden.com%]4gK\*M        m[
mythread.c:43: 警告:passing argument 2 of ‘pthread_key_create’ from incompatible pointer type
D&|p
cb!Eg
mythread.c:44: 警告:passing argument 1 of ‘pthread_create’ from incompatible pointer type
gzC)J{*Z/\ Q;hmythread.c:45: 警告:passing argument 1 of ‘pthread_create’ from incompatible pointer typegB$Y&MH)m
;\[&h9^'M4f#S
还有就是我在头文件中包含了<pthread.h>k\%PZyfXI
为什么还要在编译时加载进来呢?
NOmTr5tt+BuZyLinux伊甸园论坛
~6a@)i5VQ.p\_+zT-lpthread 为什么要加在file.c后面.B+^&o7D.gO,qXp
)n:H}5Ts(o\
@


1lEl4y}R1n^8r K[ 本帖最后由 aababy 于 2007-8-20 14:53 编辑 ]

顶部
dearvoid
版主
Rank: 7Rank: 7Rank: 7
Clark J. Wang



UID 26605
精华 26
积分 61(积分有什么用?)
帖子 4814
阅读权限 100
注册 2002-10-12
来自 Beijing, China
状态 离线
发表于 2007-8-20 15:34  资料  个人空间  短消息  加为好友 
  • 关于编译时的警告, 请参阅相关函数的 manual, 查看其 prototypeS1t{O-M$`        |7ko
  • -lpthread 加在 file.c 前面应该也可以的, 不过作为`惯例', 一般把 compile time 的 option 往前放, link time 的 option 往后放
"^m8mC}

.iI X        rJrZ8c2~[ 本帖最后由 dearvoid 于 2007-8-20 15:35 编辑 ]





'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间
顶部
不容错过的IBM 集群技术资源汇总
aababy
新生入学
Rank: 1
注册用户



UID 188794
精华 0
积分 0(积分有什么用?)
帖子 12
阅读权限 10
注册 2007-4-12
状态 离线
发表于 2007-9-4 15:54  资料  个人空间  短消息  加为好友 
回复 #4 dearvoid 的帖子

谢谢                                                 .

顶部
不容错过的IBM 集群技术资源汇总
 



当前时区 GMT+8, 现在时间是 2008-5-17 05:47

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.085875 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP