uPyCraft-micropython教程之线程与锁
2017-07-221.7万
AI 快速预览详细
本教程介绍了如何在FireBeetle-ESP32主板上使用micropython实现线程与锁的功能。通过创建3个线程(A、B、C)和一把锁,演示了多线程同步的实现方法。A线程睡眠2秒,B线程睡眠1秒,C线程无限制执行。B线程醒来后持有所并睡眠5秒,A线程尝试获取锁失败被阻塞,直到B线程释放锁后A线程才得到执行。通过这种方式,确保程序按预期顺序运行。
|
在pyboard和esp32上,都支持线程与锁。我们做一个小实验,演示一下这个功能 在这个实验中我们创建3个线程和一把锁lock,创建顺序为A,B,C。让A,B去争抢这把锁。 实验准备 硬件 1. FireBeetle-ESP32主板 软件 1. uPyCraft-0.22 2. 测试用代码thread.py 预期结果 1. A睡眠 2秒 2. B睡眠 1秒 3. C没有任何限制,最先被执行 4. B醒来,持有所,然乎睡眠5秒 5. A醒来,去获取锁失败,被阻塞,直到B释放这把所 6. B睡眠5秒完成,释放锁 7. A得到执行 本次实验代码如下: [mw_shl_code=python,true]import _thread import time lock=_thread.allocate_lock() def funcA(sec): time.sleep(sec) with lock: print('Running thread A') _thread.exit() def funcB(sec): time.sleep(sec) with lock: print('Running thread B') print('Thread B sleep 5 seconds') time.sleep(5) print('thread B weakup') _thread.exit() def funcC(): print('Running thread C') _thread.exit() _thread.start_new_thread(funcA, (2,)) _thread.start_new_thread(funcB, (1,)) _thread.start_new_thread(funcC, ()) while True: pass [/mw_shl_code] 将代码烧录并运行,执行结果见下图,与预期结果一致 ![]() |






ImportError: no module named '_thread'