import 'dart:async'; import 'package:semaphore/semaphore.dart'; import 'dart:io'; import 'dart:convert'; import 'dart:math'; import "dart:math"; void main() async { int maxCount = 5; LocalSemaphore sm = LocalSemaphore(maxCount); List<Future> tasks = []; int end = 0; for (int i = 0; i < maxCount; i++) { tasks.add(eventLoop(sm, '$i', end)); } await Future.wait(tasks); } Future eventLoop(LocalSemaphore sm, String key, int end) async { await sm.acquire(); await doWork(key, 0, true, end); sm.release(); } Future doWork(String key, int i, bool ok, int end) async { print('getting in thread: $key, bool is: $ok'); bool b = ok; int a = end; if (b) { print('thread: $key, current: $i'); await Future.delayed(Duration(seconds: 1)); a += 1; if (a > 10) { print('change the bool.here thread: $key, and a is: $a'); b = false; }else{ b = true; } print('a is: $a'); await doWork(key, i + 1, b, a); } }