C 再次初始化同一互斥锁
当我再次初始化同一互斥变量时会发生什么? 根据pthread_mutex_init手册页- 它应该失败,errno设置为EBUSY 为什么我看不到这种行为?下面的代码执行得很好C 再次初始化同一互斥锁,c,pthreads,mutex,C,Pthreads,Mutex,当我再次初始化同一互斥变量时会发生什么? 根据pthread_mutex_init手册页- 它应该失败,errno设置为EBUSY 为什么我看不到这种行为?下面的代码执行得很好 lock = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); if (pthread_mutex_init((pthread_mutex_t*)lock, NULL) != 0) { printf("\n mutex init failed\n");
lock = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
if (pthread_mutex_init((pthread_mutex_t*)lock, NULL) != 0)
{
printf("\n mutex init failed\n");
return 1;
}
if (pthread_mutex_init((pthread_mutex_t*)lock, NULL) != 0)
{
printf("\n mutex init failed %d\n", errno);
return 1;
}
提前谢谢 注意,它说pthread_mutex_init函数可能会失败,如果。。。。这意味着不需要实现来执行这些检查,显然您的实现也不需要 请查看的错误列表: 如果出现以下情况,pthread_mutex_init函数将失败: [伊根] 除了内存之外,系统缺少初始化另一个互斥锁所需的资源 [依诺曼] 内存不足,无法初始化互斥锁 [EPERM] 调用方没有执行该操作的权限 如果出现以下情况,pthread_mutex_init函数可能会失败: [EBUSY] 该实现检测到有人试图重新初始化互斥体引用的对象,该互斥体是以前初始化但尚未销毁的互斥体 [艾因瓦尔] attr指定的值无效 您会注意到[EBUSY]位于maybeail部分。因此,它不是一种保证,而只是一个实现可以做的事情 对于那些不习惯阅读标准或正式API文档的人来说,这类事情往往有点令人惊讶。措辞的选择是经过深思熟虑的,这个词通常表示允许发生的事情。“将”或“应”一词通常用于表示担保 另外,pthread_mutex_init实际上返回错误代码,如果有,它不会设置errno。从您引用的手册页中: 如果成功,pthread_mutex_destroy和pthread_mutex_init函数应返回零;否则,应返回错误号以指示错误
注意,它说pthread_mutex_init函数可能会失败,如果。。。。这意味着不需要实现来执行这些检查,显然您的实现也不需要 请查看的错误列表: 如果出现以下情况,pthread_mutex_init函数将失败: [伊根] 除了内存之外,系统缺少初始化另一个互斥锁所需的资源 [依诺曼] 内存不足,无法初始化互斥锁 [EPERM] 调用方没有执行该操作的权限 如果出现以下情况,pthread_mutex_init函数可能会失败: [EBUSY] 该实现检测到有人试图重新初始化互斥体引用的对象,该互斥体是以前初始化但尚未销毁的互斥体 [艾因瓦尔] attr指定的值无效 您会注意到[EBUSY]位于maybeail部分。因此,它不是一种保证,而只是一个实现可以做的事情 对于那些不习惯阅读标准或正式API文档的人来说,这类事情往往有点令人惊讶。措辞的选择是经过深思熟虑的,这个词通常表示允许发生的事情。“将”或“应”一词通常用于表示担保 另外,pthread_mutex_init实际上返回错误代码,如果有,它不会设置errno。从您引用的手册页中: 如果成功,pthread_mutex_destroy和pthread_mutex_init函数应返回零;否则,应返回错误号以指示错误
你为什么要这样做?我只是想模拟一个在集成系统中得到EBUSY的情况。你为什么要这样做?我只是想模拟一个在集成系统中得到EBUSY的情况。