Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ linuxthreads和nptl是否有特定的定义_C++_C_Nptl_Predefined Macro_Linuxthreads - Fatal编程技术网

C++ linuxthreads和nptl是否有特定的定义

C++ linuxthreads和nptl是否有特定的定义,c++,c,nptl,predefined-macro,linuxthreads,C++,C,Nptl,Predefined Macro,Linuxthreads,我有一个程序,它必须为linuxthreads和nptl提供不同的工作方式 这个libs中是否有定义,可以在我的程序中使用它来检测是使用了nptl还是linuxthreads 更新1:对于运行时,有一个getconf GLIBC_LIBPTHREADS,但是对于编译时,它是什么呢?看起来这是不可能的,您可以在加载时更改实现,因此无论您做什么,都无法在编译时知道 从pthreads手册页: 在具有支持的glibc的系统上 LinuxThreads和NPTL(即。, glibc2.3.x),LD_内

我有一个程序,它必须为linuxthreads和nptl提供不同的工作方式

这个libs中是否有定义,可以在我的程序中使用它来检测是使用了nptl还是linuxthreads


更新1:对于运行时,有一个getconf GLIBC_LIBPTHREADS,但是对于编译时,它是什么呢?

看起来这是不可能的,您可以在加载时更改实现,因此无论您做什么,都无法在编译时知道

从pthreads手册页:

在具有支持的glibc的系统上 LinuxThreads和NPTL(即。, glibc2.3.x),LD_内核 环境变量可用于 重写动态链接器的默认值 线程实现的选择。 这个变量告诉动态链接器 假设它运行在 特定的内核版本。通过 指定执行以下操作的内核版本 不提供所需的支持 NPTL,我们可以强制使用 LinuxThreads。(最可能的原因是什么 这样做是为了运行(断开) 应用程序,这取决于一些 不符合行为 例如:

bash$ $( LD_ASSUME_KERNEL=2.2.5 ldd /bin/ls | grep libc.so | \
                awk '{print $3}' ) | egrep -i 'threads|ntpl'
linuxthreads-0.10 by Xavier Leroy
更不用说这两个实现(大部分)是二进制兼容的,所以在编译时您基本上无法知道将使用哪个线程库,因为它可能会随着程序运行时出现的环境变量而变化,或者有人可以将二进制文件从NPTL系统复制到LinuxThreads系统。你不能这么做,因为它在编译时是未知的,至少在某种程度上你不能依赖它

您必须找到一些使用运行时检测的方法,或者您可以更新您的帖子,告知您为什么要这样做,或者有人可以提供一些建议,说明如何以其他方式完成这项工作,或者如何使用运行时检测哪些pthread正在使用


另一种可能的解决方案是在配置脚本中添加一个选项,并让编译它的人选择。

让我们后退一步,问问-为什么要这样做

是否有一方提供另一方不提供的功能?如果是这样,也许您可以在
libpthread.so
上使用,在运行时动态查询它们的存在

或者更多的是因为它们之间的行为不同,导致您的程序行为不当?如果是这样的话,我会避免依赖这些行为的结果,或者参考POSIX之类的标准来确定您可以依赖什么。通常,这种可移植性缺陷代表了代码中的真正缺陷,即使使用您认为“有效”的库,也可能需要解决这些缺陷。当并发进入画面时,正确处理这一点尤为重要

最后,如果是结构尺寸的问题。。。在这方面也可能有一些不切实际的方法。例如(仅举一个例子,可能完全不正确,但说明了该想法):

//破解pthread\u mutex\u t中的差异
//
#定义pthread_mutex_t pthread_mutex_t_linuxthreads
#包括
#取消定义pthread\u mutex\t
#定义pthread\u mutex\u t pthread\u mutex\u t\u ntpl
#包括
#取消定义pthread\u mutex\t
typedef联合{
pthread_mutex_t_linxthreads linuxthreads;
pthread_mutex_t_ntpl ntpl;
}pthread_mutex_t;

非常粗糙,非常难看,但只是把这些想法作为一种可能的解决办法扔出去…

在浏览了标题之后,没有-对于NPTL和LinuxThreads没有具体的定义

如果您需要这样一个define,请编写一个生成头文件的小脚本,或者将define标志传递给编译器。您可以通过解析/lib/libc.so.6(该库可以作为普通可执行文件直接运行)的输出来获取信息。我将把详细信息留给您,但输出如下所示:

LinuxThreads:

GNU C Library stable release version 2.3.4, by Roland McGrath et al. Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 3.4.6 20060404 (Red Hat 3.4.6-11). Compiled on a Linux 2.4.20 system on 2010-04-18. Available extensions: GNU libio by Per Bothner crypt add-on version 2.1 by Michael Glad and others linuxthreads-0.10 by Xavier Leroy The C stubs add-on version 2.1.2. BIND-8.2.3-T5B NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk Glibc-2.0 compatibility add-on by Cristian Gafton GNU Libidn by Simon Josefsson libthread_db work sponsored by Alpha Processor Inc Thread-local storage support included. For bug reporting instructions, please see: . GNU C库稳定版2.3.4,由Roland McGrath等人。 版权所有(C)2005免费软件基金会。 这是自由软件;有关复制条件,请参见源。 没有担保;甚至不是为了适销性或是否适合 特殊目的。 由GNU CC版本3.4.6 20060404(Red Hat 3.4.6-11)编译。 于2010年4月18日在Linux 2.4.20系统上编译。 可用扩展名: 伯特纳的GNU libio MichaelGlady和其他人的crypt附加组件2.1版 Xavier Leroy的linuxthreads-0.10 C存根插件版本2.1.2。 BIND-8.2.3-T5B Thorsten Kukuk的NIS(YP)/NIS+NSS模块0.19 Cristian Gafton的Glibc-2.0兼容性附加组件 西蒙·约瑟夫森的GNU Libidn libthread_db工作由Alpha Processor Inc.赞助 包括线程本地存储支持。 有关错误报告说明,请参阅: . NPTL:

GNU C库稳定版2.5,由Roland McGrath等人。 版权所有(C)2006免费软件基金会。 这是自由软件;有关复制条件,请参见源。 没有担保;甚至不是为了适销性或是否适合 特殊目的。 由GNU CC版本4.1.2 20080704(Red Hat 4.1.2-48)编译。 2010年10月25日在Linux 2.6.9系统上编译。 可用扩展名: C存根插件版本2.1.2。 MichaelGlady和其他人的crypt附加组件2.1版 西蒙·约瑟夫森的GNU Libidn 伯特纳的GNU libio Thorsten Kukuk的NIS(YP)/NIS+NSS模块0.19 Ulrich Drepper等人的原生POSIX线程库 BIND-8.2.3-T5B RT使用linux内核aio 包括线程本地存储支持。 有关错误报告说明,请参阅: .
(不过,尽量编写不需要处理此问题的代码。到目前为止,在RHEL 4(linuxthreads)和RHEL 5(NPTL)上运行的多线程应用程序中,我们还没有遇到任何需要此功能的情况。)

您确定需要支持linuxthreads吗?NPTL已经成为标准几年了。。。另外,您是否确实需要检测正在运行的实现?好的,为什么需要检测正在运行的实现? GNU C Library stable release version 2.3.4, by Roland McGrath et al. Copyright (C) 2005 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 3.4.6 20060404 (Red Hat 3.4.6-11). Compiled on a Linux 2.4.20 system on 2010-04-18. Available extensions: GNU libio by Per Bothner crypt add-on version 2.1 by Michael Glad and others linuxthreads-0.10 by Xavier Leroy The C stubs add-on version 2.1.2. BIND-8.2.3-T5B NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk Glibc-2.0 compatibility add-on by Cristian Gafton GNU Libidn by Simon Josefsson libthread_db work sponsored by Alpha Processor Inc Thread-local storage support included. For bug reporting instructions, please see: . GNU C Library stable release version 2.5, by Roland McGrath et al. Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiled by GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-48). Compiled on a Linux 2.6.9 system on 2010-10-25. Available extensions: The C stubs add-on version 2.1.2. crypt add-on version 2.1 by Michael Glad and others GNU Libidn by Simon Josefsson GNU libio by Per Bothner NIS(YP)/NIS+ NSS modules 0.19 by Thorsten Kukuk Native POSIX Threads Library by Ulrich Drepper et al BIND-8.2.3-T5B RT using linux kernel aio Thread-local storage support included. For bug reporting instructions, please see: .