lv_micropython/tests/thread/disable_irq.py

52 lines
993 B
Python
Raw Normal View History

# Ensure that disabling IRQs creates mutual exclusion between threads
# (also tests nesting of disable_irq across threads)
import machine
import time
import _thread
if not hasattr(machine, "disable_irq"):
print("SKIP")
raise SystemExit
count = 0
thread_done = False
def inc_count():
global count
a = machine.disable_irq()
try:
count += 1
i = 0
while i < 20:
b = machine.disable_irq()
try:
count += 1
count -= 1
i += 1
finally:
machine.enable_irq(b)
finally:
machine.enable_irq(a)
def inc_count_multiple(times):
for _ in range(times):
inc_count()
def thread_entry(inc_times):
global thread_done
inc_count_multiple(inc_times)
thread_done = True
_thread.start_new_thread(thread_entry, (1000,))
inc_count_multiple(1000)
time.sleep(1)
print("count", count, thread_done)
if count == 2000:
print("PASS")