以下是读者写者问题的一个版本:多个读者和写者,2个或更多的读者可以同时读取,如果有一个写者正在写入,则无法读取或写入,最好所有写者都有平等的机会进行写作(例如在100轮中,5个写者应该各自写入约20次)。如何使用STM在Clojure中正确实现这一点?我不需要完整的代码,只需要一些一般的指导。
(. (java.lang.Thread. #(dosync (write stuff)) start))
(. (java.lang.Thread. #(dosync (read stuff)) start))
正如其他答案中提到的那样,读取器在读取时不会阻塞,如果您想要阻塞读取器,那么您可能需要将它们实现为“写入器”,该写入器在其回调函数中写入相同的值。我知道这是一个奇怪的解决方案,但也许可以帮助您或给您一些进一步的方向。