当前位置:  技术问答>linux和unix

关于线程创建的接口问题

    来源: 互联网  发布时间:2016-04-24

    本文导语:    1 #include "apue.h"   2 #include    3    4 pthread_t ntid;   5    6 void   7 printids(const char *s)   8 {   9         pid_t           pid;  10         pthread_t       tid;  11   12         pid = getpid();  13  ...

  1 #include "apue.h"
  2 #include 
  3 
  4 pthread_t ntid;
  5 
  6 void
  7 printids(const char *s)
  8 {
  9         pid_t           pid;
 10         pthread_t       tid;
 11 
 12         pid = getpid();
 13         tid = pthread_self();
 14         printf("%s pid %u tid %u (0x%x)n", s, (unsigned int)pid,
 15           (unsigned int)tid, (unsigned int)tid);
 16 }
 17 
 18 void *
 19 thr_fn(void *arg)
 20 {
 21         printids("new thread: ");
 22         return((void *)0);
 23 }
 24 
 25 int
 26 main(void)
 27 {
 28         int             err;
 29 
 30         err = pthread_create(&ntid, NULL, thr_fn, NULL);
 31         if (err != 0)
 32                 err_quit("can't create thread: %sn", strerror(err));
 33         printids("main thread:");
 34         sleep(1);
 35         exit(0);
 36 }


我的系统fedora 9 编译器 GCC4.3 
提示如下

/tmp/ccyszIni.o: In function `main':
q.c:(.text+0x536): undefined reference to `pthread_create'
collect2: ld 返回 1



我又看了下man  说明是linux提供的实现接口可能不同.......
[align=center] This  manual  page is part of the POSIX Programmer’s Manual.  The Linux implementation of this interface may differ (consult the corresponding Linux manual
       page for details of Linux behavior), or the interface may not be implemented on Linux.[/align]




到底是怎么回事?是linux内核原因?还是GCC版本原因?


在我的这个环境下pthread_create这个进程创建的接口函数如何实现?
请大侠详细解释下





~       

|
Linux是提供这个接口的, 你提供的那段文字是说, Linux的实现这个接口的方式可能不一样. Linux没为线程直接提供系统调用接口, 是通过对就不同实现方法的各种posix线程库实现的, 所以编译的时候需要把pthread线程库给链接进去. 方法如楼上各件所说.

至于你说的pthread_create是如何实现的,看你的内核版本,2.4及以前通过linuxthread库实现, 2.6通过nptl实现, 实际内部都调用了系统调用clone(), 通过设置不同的flag达到创建线程的目的, 具体你可以去man一下clone,就会发现一些有趣的调用flag.

|
假设你的源文件是 test.c

gcc -o test test.c -lpthread

|
 g++     -lpthread     xxx.o   -o   xxxx

你没有加编译参数把。??

|
编译的时候没有把pthread的库链上。

|
这个是连接错误,就是说找不到pthread_create的符号表,所以在编译连接是要加上-lpthread

    
 
 

您可能感兴趣的文章:

  • java线程之使用Runnable接口创建线程的方法
  • java多线程编程之使用runnable接口创建线程
  • 请问Runnable接口为什么能实现多线程?
  • C#通过接口与线程通信(捕获线程状态)示例代码
  • 请问:进程创建的线程是怎样运行的啊,线程的处理函数运行完了,线程就退出了吗?
  • 一个进程创建了两个线程,如何使得当任何一个线程(比如线程a)结束时,同时也结束线程b,也就是使两个线程一起死掉,怎么办呢?
  • 在创建linux线程时为什么会多一个线程?
  • 大家好,pthread库创建线程,如何等待线程安全退出?
  • 在一个进程的主线程中如何判断自己创建的线程是否存在?
  • 线程这样创建行吗?
  • 如何在kthread_create创建的线程函数里面退出该线程呢????
  • Unix中PThread是干什么用的,创建线程吗---小妹
  • 创建线程失败 返回值为 11 怎么回事?
  • 用kthread_run创建kernel thread, 能不能限制线程的数目?
  • 有关线程创建的问题
  • 怎样创建一个幽灵线程?
  • 如何知道一个线程是由哪段代码创建的
  • 如何实现线程的“即时创建,即时销毁”?
  • C++ 创建线程问题
  • 在arm linux环境下面线程创建的问题
  • 多线程创建socket
  • linux创建线程失败问题!!!
  • 由同一个服务端创建两个线程分别向两个客户端同时发送不同的数据···
  • python创建线程示例
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Java中多线程相关类Thread介绍
  • java 线程,对当前线程(非主线程)调用sleep,为什么主线程(窗口)也没反应了
  • c#多线程更新窗口(winform)GUI的数据
  • 如何实现一个线程组内多线程的非同不执行,即一个线程执行完毕后再执行下一个线程???
  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • 关于线程的问题,什么样的线程不是active线程?
  • c++的boost库多线程(Thread)编程(线程操作,互斥体mutex,条件变量)详解
  • 请问Linux核心支持多线程吗?开发库有线程库吗?线程好用吗?(稳定?)
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 请问,在一个进程中创建多线程时如何能避免不同的线程获得同一个线程标识
  • 我的一个多线程服务里, 总是有一个线程莫名其妙的变成僵尸线程。
  • 能否通过线程id控制线程的状态?或是观察到线程的状态?
  • 如何在一个线程中启动另外一个线程,然后本线程就退出?
  • 我要设置一个线程的优先级, 这个属性结构并没有线程的id,它怎么知道是设置哪个线程呢?
  • 请问在java多线程中,是只有run(){}内的代码运行在一个新线程下呢?还是这个类中的代码都运行在一个新线程下?
  • gcc链接的库,分不分单线程版本的和多线程版本的?
  • 内核栈~ 内核线程 ~用户线程 之间关系 问题
  • 子线程的数据如何返回给主线程?
  • 如果父线程死掉 那么子线程会不会死掉呢
  • 多线程为何比单线程慢许多?
  • 如何设计线程池的监视线程


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3