1.概述
![](https://img-blog.csdnimg.cn/c109fc865dee406c8e8cbaa11fae9d66.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_18,color_FFFFFF,t_70,g_se,x_16)
2.event事件,不需要例化,不要new。
![](https://img-blog.csdnimg.cn/4a2a0103a3314bd5ad5f22c8912a9f61.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/4b5a7cbaed6a4526b360347348127047.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_14,color_FFFFFF,t_70,g_se,x_16)
-
event e1,e2;相当于创建了两个对象了,不需要new。
![](https://img-blog.csdnimg.cn/490d6365927e46f6930c1a6ecd5d536d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
-
给e1打完了电话之后,在等待e2打过来电话。
-
e2打电话之后发现e1已经在等待他了,所以就先执行了e1的after trigger。
![](https://img-blog.csdnimg.cn/e1f8ef1e09284ad384459ebcae5cda42.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_15,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/c29fdae9318542658e27e45e1481d119.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_8,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/e61b8a06e86043d5aef555366b095a4c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/45f3ae2ee39244ef9403b4b0208bb34b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_16,color_FFFFFF,t_70,g_se,x_16)
-
e1被触发后使用电平敏感检测,相当于多了一个检查之前谁给e1打过电话,只要在wait当前时刻或者wait之后的时刻触发了e1,event_trigger电平就会一直保持为1。
-
wait可以避免竞争的问题。
3.通知的需求
![](https://img-blog.csdnimg.cn/004d39c7ed4b4d9e93337cf1c411eb24.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/d43b2e2d6b684e4c888ad8439c425bc2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
只要车子被发动了就能move。
![](https://img-blog.csdnimg.cn/fd8699b1630b41169e68b67e971133e1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
使用@是为了一直捕捉到speedup能够反复捕捉到一个状态
如果想要等待一个event使用wait都需要该事件当前这个时刻或者这个时刻之后触发才算数。比如在10ns处wait,那么在10ns之前发生过该事件,那么event.trigger都不会触发。
![](https://img-blog.csdnimg.cn/2a0860c1c1884520ae1ee3737f904f4b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_15,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/11db03c0ab224ba8977815435678fcad.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
4.semaphore旗语,是对象,需要new来例化
![](https://img-blog.csdnimg.cn/dee9d1c592684624b15a20d95d7f4ca4.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/28ac10740ad04ae3bb8b1a20d33aa9b2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_12,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/36d55903f3a840de9d9566e366c81e88.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_19,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/43d757c75ef844e39911c94838f72257.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
-
初始化时可以初始化为0个钥匙,没有钥匙的话,可以不停的put还钥匙,还了多少,他就有多少钥匙了。实验三就是初始化为0把钥匙,然后不断往里还了三把钥匙。semaphore初始化必须要new()。
![](https://img-blog.csdnimg.cn/1038fd08cc27429c89d1dc4c9ec65cba.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/f221f434547a496fae91d7ba20084ffd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/44fa330af75e413f9a0aa693406b07de.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
5.mailbox信箱,也是对象,需要new来例化。
![](https://img-blog.csdnimg.cn/a95ef92d52534fa183260a6411abe24d.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/910d52c144a041e0a8c2fcc19bdaa52c.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_16,color_FFFFFF,t_70,g_se,x_16)
6.数据通信的需求
![](https://img-blog.csdnimg.cn/385539f510d742449911250569bfc2a7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/d4ffb5f140f94936bcfd9ce41abf1301.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/8e10304372e8488ea22acda3583c5be1.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/efbec40a05594d26bdb913f6ce6da4f0.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/b3788f30e8084c6b8188c02c4ad940d7.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/f9a0ae9bd7764d439ecd41cd305a4454.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
-
队列需要判断是否为空满,再从队列中pop拿出数据,不然会报错。
-
ref int q[$],因为需要对这些队列的指针进行操作,因此需要对外部队列进行操作,因此需要使用ref。
-
队列不需要例化,只需要声明即可。
![](https://img-blog.csdnimg.cn/4f80339072da492190d59a0b90c0131e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/2ac9abde52a6477194367efe9441a75a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
7.进程的同步需求
![](https://img-blog.csdnimg.cn/d171f37b767e42ab90767e1e662e4ad3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/0ac5440d6bca459e9734e034931a891a.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
-
task stall,先e_stall,再等待e_park。
![](https://img-blog.csdnimg.cn/2b0227f5028b475da618273bf96aa10b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
![](https://img-blog.csdnimg.cn/15fe8842f468414fb5bd1c2ea69c62f3.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
上述三种方法,均实现了进行的握手。stall先放数据,然后park拿到数据,park拿到之后还回去,该数据再被stall拿到数据。
![](https://img-blog.csdnimg.cn/dcdf16b30e6a45a4aa0f86c30622b000.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
-
event和semaphore更偏向小信息量的同步,即不包含更多的数据信息
-
mailbox更适合多数据量。
8.event、semophore、mailbox之间的对比
![](https://img-blog.csdnimg.cn/3d8ff5bada354fa1be638ae81e530958.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAY2hhbmdzaGVuZ3FpdQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
-
event为打电话接电话,单一的通知功能。
-
semaphore为用钥匙开锁。
-
mailbox为信箱取信放回。