...
yield和resume是同步的,也就是,一个协程的resume必然对应另一个协程的yield,反之亦然,并且,一条线程同一时间只能有一个协程是执行状态。
协程关键:
1. 协程虽然被称为轻量级线程,但在同一个线程内,协程并不能并发执行,而是只能按顺序执行。其实这点也好理解,毕竟协程其实就是以一种花里胡哨的方式调用子函数,不管实现得如何巧妙,也不可能在单线程里做到同时运行两个子函数,否则还要多线程有何用?
2. 因为单线程下协程并不是并发执行,而是顺序执行的,所以不要在协程里使用线程级别的锁来做同步,比如pthread_mutex_t。如果一个协程在持有锁之后让出执行,那同线程的其他任何协程只要一旦尝试再次持有这个锁,整个线程就锁死了,这和单线程环境下,连续两次持有同一个锁导致的死锁原理完全一样。