- 论坛徽章:
- 0
|
我在freebsd5.21下写了一个多线程的程序,使用了两个消息队列,源码摘录如下:
main()
{ ...........................
if((n=pthread_create(&tid1, NULL, &dofunc1, NULL))==0{
fprintf(stderr,"thread1:[ID=%d] starting...\n",*tid);
return;
}
if((n=pthread_create(&tid2, NULL, &dofunc2, NULL))==0{
fprintf(stderr,"thread2:[ID=%d] starting...\n",*tid);
return;
}
........................
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
.................
exit(0);
}
void *
dofunc1(void *vptr)
{
fprintf(stderr,"thread1:ID=[%d] begin......\n",pthread_self());
rel = msgrcv(msgid1, ( MSGCMPP * ) rcvpkt1, CMPP_MAX_LEN, 0, MSG_NOERROR);
.............
}
void *
dofunc2(void *vptr)
{
fprintf(stderr,"thread2:ID=[%d] begin......\n",pthread_self());
rel = msgrcv(msgid2, ( MSGCMPP * ) rcvpkt2, CMPP_MAX_LEN, 0, MSG_NOERROR);
.............
}
编译通过,执行结果居然如下
Pthread1:ID=[134754304] starting......
Pthread2:ID=[134754321] starting......
Pthread1:ID134754304] begin......
没有出现Pthread2:ID134754321] begin......这一信息,好象是线程1阻塞在msgrcv时,线程2没有执行,结果是无法实现并行运行,这是为什么??? |
|