经典问题,请问我在运行以下代码时,我没有从代码中找到确认。这是C语言的代码,我正在Windows系统上运行。
/* This is an implementation of the threads API of POSIX 1003.1-2001.*/
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
pthread_mutex_t mutex = PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP;
//equivalent to PTHREAD_MUTEX_ERRORCHECK
void* thread_function(void *args)
{
int rc;
rc = pthread_mutex_unlock( & mutex );
printf( "[thread_function] pthread_mutex_unlock rc: %d \n", rc);
return 0;
}
int main(int argc, char* argv[])
{
int rc;
pthread_t id;
pthread_mutex_lock( &mutex );
rc = pthread_create(&id, NULL, thread_function, NULL);
pthread_join(id, NULL);
printf( "[main] completed\n");
}
rc = pthread_mutex_unlock( & mutex );
- 返回的 rc 值等于 1,这是预期的结果。
但当我将代码更改为 rc = pthread_mutex_lock( & mutex );
时,错误就不会发生。
但在许多 Pthread API 文档中都提到:
“如果互斥体类型为 PTHREAD_MUTEX_ERRORCHECK,则应提供错误检查。如果线程尝试重新锁定已经锁定的互斥体,则会返回错误。”
但对我来说并没有返回错误,问题是为什么? 我唯一猜测的是它取决于我正在使用的 PThread 实现。 它也可能取决于操作系统;即相同的代码和相同版本的 Pthread 库在 Linux 上会产生不同的结果。
请问有人能澄清吗?
谢谢!
pthread_mutex_lock(&mutex);
返回一个错误呢?在你展示的上下文中,这是一个有效的调用。 - alk