esp32/mpthreadport: Use binary semaphore instead of mutex.
So a lock can be acquired on one Python thread and then released on another. A test for this is added. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
31e0b8c71c
commit
864e4ecc47
@ -192,7 +192,10 @@ void vPortCleanUpTCB(void *tcb) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void mp_thread_mutex_init(mp_thread_mutex_t *mutex) {
|
void mp_thread_mutex_init(mp_thread_mutex_t *mutex) {
|
||||||
mutex->handle = xSemaphoreCreateMutexStatic(&mutex->buffer);
|
// Need a binary semaphore so a lock can be acquired on one Python thread
|
||||||
|
// and then released on another.
|
||||||
|
mutex->handle = xSemaphoreCreateBinaryStatic(&mutex->buffer);
|
||||||
|
xSemaphoreGive(mutex->handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
int mp_thread_mutex_lock(mp_thread_mutex_t *mutex, int wait) {
|
int mp_thread_mutex_lock(mp_thread_mutex_t *mutex, int wait) {
|
||||||
|
16
tests/thread/thread_lock5.py
Normal file
16
tests/thread/thread_lock5.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# test _thread lock objects where a lock is acquired/released by a different thread
|
||||||
|
|
||||||
|
import _thread
|
||||||
|
|
||||||
|
|
||||||
|
def thread_entry():
|
||||||
|
print("thread about to release lock")
|
||||||
|
lock.release()
|
||||||
|
|
||||||
|
|
||||||
|
lock = _thread.allocate_lock()
|
||||||
|
lock.acquire()
|
||||||
|
_thread.start_new_thread(thread_entry, ())
|
||||||
|
lock.acquire()
|
||||||
|
print("main has lock")
|
||||||
|
lock.release()
|
Loading…
Reference in New Issue
Block a user