回来广州粤嵌学习的第二周,今天刚学完了条件变量,描述一下其中使用方法。一开始银行卡里面有2000块钱,
①我先拿到银行卡(优先访问共享资源),上锁,发现里面大于等于1000(不满足进入条件变量阻塞等待的条件),然后访问共享资源,解锁离开;
②等到哥拿到银行卡,上锁,发现也不满足进入条件变量阻塞等待的条件,然后访问共享资源,解锁离开;
③轮到姐拿到银行卡,上锁,发现里面少于1000块钱,满足进入条件变量阻塞等待的条件,然后对银行卡(锁)进行解锁,进入条件变量中等待,
④此时弟也拿到银行卡,上锁,发现满足条件变量阻塞等待条件,进入条件变量中等待,进入前先对银行卡(也就是锁)解锁;
⑤过了5秒后,父母拿到银行卡,上锁,打钱过来(访问共享资源),然后解锁,最后广播唤醒所有在条件变量中等待的线程;
⑥在条件变量中等待的线程接收到广播后会一起去争夺银行卡,先到先得,假如姐先拿到,会先对资源上锁(在条件变量中上),发现不满足进入条件变量的条件,访问资源,然后解锁走人;
⑦弟后拿到银行卡,上锁(条件变量中上锁),发现依然满足进入条件变量等待的条件,再次进入条件变量中阻塞等待,
⑧再过5秒后,父母上锁。访问共享资源,解锁,单播唤醒随机一条线程,线程在条件变量中上锁,访问共享资源,发现不满足进入条件变量的条件,访问共享资源,解锁走人。


①我先拿到银行卡(优先访问共享资源),上锁,发现里面大于等于1000(不满足进入条件变量阻塞等待的条件),然后访问共享资源,解锁离开;
②等到哥拿到银行卡,上锁,发现也不满足进入条件变量阻塞等待的条件,然后访问共享资源,解锁离开;
③轮到姐拿到银行卡,上锁,发现里面少于1000块钱,满足进入条件变量阻塞等待的条件,然后对银行卡(锁)进行解锁,进入条件变量中等待,
④此时弟也拿到银行卡,上锁,发现满足条件变量阻塞等待条件,进入条件变量中等待,进入前先对银行卡(也就是锁)解锁;
⑤过了5秒后,父母拿到银行卡,上锁,打钱过来(访问共享资源),然后解锁,最后广播唤醒所有在条件变量中等待的线程;
⑥在条件变量中等待的线程接收到广播后会一起去争夺银行卡,先到先得,假如姐先拿到,会先对资源上锁(在条件变量中上),发现不满足进入条件变量的条件,访问资源,然后解锁走人;
⑦弟后拿到银行卡,上锁(条件变量中上锁),发现依然满足进入条件变量等待的条件,再次进入条件变量中阻塞等待,
⑧再过5秒后,父母上锁。访问共享资源,解锁,单播唤醒随机一条线程,线程在条件变量中上锁,访问共享资源,发现不满足进入条件变量的条件,访问共享资源,解锁走人。

