2010-03-01 22 views
3

我写了一些pthread代码,它们在条件变量上使用定时等待,但为了确保相对等待,我使用pthread_condattr_setclock()将condvar的时钟类型设置为CLOCK_MONOTONIC。针对pthread函数的NPTL链接pthread_condattr_setclock

为了在RHEL4上编译和链接pthread_condattr_setclock(),我必须在我的gcc命令行中添加-I/usr/include/nptl和-L/usr/lib/nptl。我的理解是,2.6内核(RHEL4有)默认使用NPTL pthread实现,为什么我需要明确指定这些路径才能使用此函数?

只有这个函数需要我这样做:如果我不写,所有东西都编译并链接正常,没有指定额外的路径(尽管代码的行为不正确)。

回答

1

从我所能找到的,分别在/ usr/include和/ usr/lib中的pthread头文件和库是旧的LinuxThreads实现,我的假设是它们存在向后兼容性(即,您应该构建针对旧接口),但在运行时使用NPTL实现(其接口是LinuxThreads接口的超集)。

因此,如果您知道需要它,并且至关重要的是,您知道NPTL接口在运行时可用,那么您只能使用新的NPTL接口(即,如果您需要某些附加功能)。