[理工] 作业系统 Producer-Consumer

楼主: NTUmaki (西木野真姬)   2020-08-10 18:22:07
https://i.imgur.com/AtNCTE2.jpg
想问这个算法有race condition是因为 producer, consumer 各不只一个吗?
我记得老师说 in out buffer有 race condition 但看不出来在哪
作者: A4P8T6X9 (残废的名侦探)   2020-08-10 21:37:00
生产者跟消费者同时做事会爆
作者: b10007034 (Warren)   2020-08-10 22:12:00
Producer(P)是load, Consumer(C)是storeP&C这两个thread同时执行,操作的buffer会有race condition
楼主: NTUmaki (西木野真姬)   2020-08-11 10:27:00
不太懂 race condition 在哪 buffer的位址没有变 他们拿跟存的位址也不一样 应该不会同时对同一个位址做存取?从底层来看 他们都只是拿buffer起始位址去运算 只有读 而且算完结果也不一样(我自己trace了几次 应该是不会一样)不会race condition 才对呀?
作者: f255577 (沈大妈)   2020-08-11 17:33:00
P/C各跑一个concurrent thread可能会有不同结果
楼主: NTUmaki (西木野真姬)   2020-08-11 19:26:00
我还是看不出来buffer哪边有问题,in out他们根本没有互相写 应该不可能有race condition,buffer他们存入/取出的位置也是不同的(只是起始位置相同 但RR不会 race condition
作者: f255577 (沈大妈)   2020-08-11 21:53:00
不一定要互相写才会race condition另一边读也可能读到写前或写后
楼主: NTUmaki (西木野真姬)   2020-08-11 22:27:00
他们都是存完、取完才去更动in out 应该不会有错?可以给个会错的例子吗QQ 我看不太出来哪一种执行顺序会导致错误结果
作者: f255577 (沈大妈)   2020-08-11 22:32:00
要用组语的角度看 可能load完就context switch
楼主: NTUmaki (西木野真姬)   2020-08-12 09:12:00
Load完切走没关系啊 另一边并不会改动in 值? 你的意思是说in=(in+1)%n 还没执行完就被 consumer 切去判断in==out吗? 这样顶多他那次循环判断浪费 但不会影响执行结果的正确性啊
作者: yagerbomb (ㄅD)   2020-08-12 09:35:00
我看很久没问题 只有 下一个算法的count 因为两边有做运算可能导致错误结果 其他几个变量都不会因为concurrent导致错误结果这问题明明就给个例子就解决了== 问那么长

Links booklink

Contact Us: admin [ a t ] ucptt.com