查看: 6389|回复: 3

[IDE系列教程] 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得到执行

本次实验代码如下:
[Python] 纯文本查看 复制代码
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

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

thread.png




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,只有这两个可以用线程
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2020 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail