一、SyncCounterSyncCounter允许一个或多个线程等待其他线程完成各自的工作后再继续执行。它非常适合一个或多个线程需要等待另一组线程全部执行完成后才能执行的场景。依旧是一群游客乘坐大巴车去旅游。只有当所有游客都到集合地后他们才能乘坐大巴车前往旅游景点的例子。package Study // 导包 import std.sync.* main () { // 需要协调的线程数 let count 3 let syncCounter SyncCounter(3) for (_ in 0..count) { spawn { println(游客${Thread.currentThread.id}正在前往集合地) // 模拟前往集合地的时间 sleep(Duration.second * 3) println(游客${Thread.currentThread.id}到达集合地) // 倒数计数器-1 syncCounter.dec() } } // 等待所有游客到达 syncCounter.waitUntilZero() println(所有游客均已到齐! 游客们乘坐大巴车前往旅游景点) }在举一个例子一个Web系统的部署其中有两个独立的服务需要部署他们都需要等待MySQL数据库和Redis数据库完成初始化后才可以开始启动。package Study // 导包 import std.sync.* main () { let syncCounter SyncCounter(2) // 创建MySQL数据库初始化线程 let mysql spawn { println(MySQL数据库初始化中) sleep(Duration.second * 3) println(MySQL数据库初始化完成) syncCounter.dec() } // 创建Redis数据库初始化线程 let redis spawn { println(Redis数据库初始化中) sleep(Duration.second * 3) println(Redis数据库初始化完成) syncCounter.dec() } let service1 spawn { // 等待MySQL数据库和Redis数据库初始化完成 syncCounter.waitUntilZero() println(服务1启动) } let service2 spawn { // 等待MySQL数据库和Redis数据库初始化完成 syncCounter.waitUntilZero() println(服务2启动) } mysql.get() redis.get() service1.get() service2.get() }二、小结本章为大家详细的介绍了仓颉编程语言中多线程协调之SyncCounter的内容下一章为大家带来多线程协调之Semaphore的内容。最后创作不易如果大家觉得我的文章对学习仓颉服务端开发有帮助的话就动动小手点个免费的赞吧收到的赞越多我的创作动力也会越大哦谢谢大家