如何在Linux实现自定义的errno
问题引入
上个月我在知乎问了一个问题
如何用C实现一个简单的线程安全的errno?
然而因为项目的问题,最后不了了之了
回顾
再次回过头研究了这个问题,我还是对多线程了解的太少了。
原来在posix pthread中还有pthread_once,pthread_create_key 这样神奇的函数
实现:
static pthread_key_t sdk_errno_map;
static pthread_once_t sdk_errno_once = PTHREAD_ONCE_INIT;
const char *sdk_errlist[] = {
"error_1", "error_2", "error_3", "error_4", "error_5"};
void sdk_init_errno()
{
pthread_key_create(&sdk_errno_map, NULL);
}
void sdk_set_errno(int error_number)
{
pthread_once(&sdk_errno_once, sdk_init_errno);
int *errno = pthread_getspecific(sdk_errno_map);
if (NULL == errno) {
errno = calloc(1, sizeof(int));
pthread_setspecific(sdk_errno_map, errno);
}
*errno = error_number;
}

本文介绍了如何在Linux环境中,使用C语言和线程局部存储来实现一个线程安全的errno。通过pthread_key_t创建特定于线程的errno变量,确保每个线程都能拥有独立的错误信息。测试代码验证了该方法的有效性。
最低0.47元/天 解锁文章
535

被折叠的 条评论
为什么被折叠?



