秦皇岛岛主 发表于 2017-7-22 11:28:02

uPyCraft-micropython教程之线程与锁

在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得到执行

本次实验代码如下:
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

将代码烧录并运行,执行结果见下图,与预期结果一致






xizonghu 发表于 2018-6-26 16:16:03

本帖最后由 xizonghu 于 2018-6-26 16:28 编辑

原来esp8266不能用啊

xizonghu 发表于 2018-6-26 16:27:22

提示
ImportError: no module named '_thread'

秦皇岛岛主 发表于 2018-9-25 17:21:32

xizonghu 发表于 2018-6-26 16:27
提示
ImportError: no module named '_thread'

pyboard和esp32,只有这两个可以用线程
页: [1]
查看完整版本: uPyCraft-micropython教程之线程与锁