我正在开发一个嵌入式Linux操作系统(uClinux)上的应用程序,并且我需要能够在同一线程中多次锁定互斥量。
我定义了一个互斥量(mutex)和一个互斥量属性(mutexattr),并进行了初始化,如下所示:
pthread_mutexattr_t waiting_barcode_mutexattr;
pthread_mutex_t waiting_barcode_mutex;
pthread_mutexattr_init(&waiting_barcode_mutexattr);
pthread_mutexattr_settype(&waiting_barcode_mutexattr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&waiting_barcode_mutex, &waiting_barcode_mutexattr);
但是当我尝试两次获取锁时,它在第二次获取锁时被阻塞:
pthread_mutex_lock(&waiting_barcode_mutex);
pthread_mutex_lock(&waiting_barcode_mutex);
我是不是初始化有误了?或者有更好的方法来完成相同的任务吗?
先行致谢。
结论:
- 显然,PTHREAD_MUTEX_RECURSIVE或PTHREAD_MUTEX_RECURSIVE_NP不起作用,因此我无法创建可重入互斥锁。
- try_lock也不行。如果可以获取锁,则会获得锁,并返回错误,如果无法获取锁,则返回错误信息。但不幸的是,该错误只告诉我互斥锁已经在使用中,我无法确定当前线程是否已经拥有锁。
- pthread_mutex_lock可以返回错误,如果当前线程拥有锁,则需要创建类型为PTHREAD_MUTEX_ERRORCHECK的mutex,但我也无法创建这样一个mutex。