Meg*_*can 10 c linux posix uclinux embedded-linux
我正在开发嵌入式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);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试获取锁定两次时它会阻塞第二个锁:
pthread_mutex_lock(&waiting_barcode_mutex);
pthread_mutex_lock(&waiting_barcode_mutex);
Run Code Online (Sandbox Code Playgroud)
我错误地初始化它还是有更好的方法来实现它?
提前致谢.
Jef*_*f B 10
这不是你想要的吗?
第一个调用获取锁定,第二个调用将阻塞,直到第一个锁定被释放(pthread_mutex_unlock).锁是这样做的.
从文档:
"如果互斥锁已被锁定,则调用线程将阻塞,直到互斥锁变为可用."
也许你想要pthread_mutex_trylock?除非我们知道你想要完成什么,否则很难说.
更正:
我没有看到你正在设置PTHREAD_MUTEX_RECURSIVE ....让我再考虑一下.
思考后:
从围绕谷歌代码搜索,看起来PTHREAD_MUTEX_RECURSIVE似乎并未在所有库中实现.您可以尝试PTHREAD_MUTEX_RECURSIVE_NP,或者您可能已经做了一些想要解决这个问题的事情.
(刚刚意识到我没有将此问题标记为已回答)
\n\n摘自问题中的结论:
\n\n