如何仅在pthreads未声明pthread_yield时定义该函数?
解决Ubuntu不同版本pthread_yield兼容性问题
要实现仅在系统未提供pthread_yield时才定义替代函数,可以借助POSIX标准的预编译宏进行条件判断,具体方案如下:
核心逻辑:利用POSIX定义的
_POSIX_THREAD_YIELD宏检测系统是否支持pthread_yield。该宏在支持pthread_yield的系统中会被定义为非负整数(如200112L),不支持时则未定义或被设为-1。替换代码:将原有的实现改为带条件编译的版本,确保仅在需要时生效:
#include <pthread.h> #include <sched.h> #if !defined(_POSIX_THREAD_YIELD) || (_POSIX_THREAD_YIELD < 0) int pthread_yield(void) { return sched_yield(); } #endif
- 编译说明:编译时正常链接pthread库即可(例如添加
-lpthread参数),pthread.h会自动处理宏的定义,无需额外配置。
这样修改后,代码在存在pthread_yield的系统中会直接使用原生函数,在Ubuntu 22.04这类不提供该函数的系统中则自动启用替代实现,完美兼容不同版本。
内容的提问来源于stack exchange,提问作者Santi Peñate-Vera
相关产品推荐
相关产品推荐

