http://www.zeromq.org/blog:multithreading-magic沒有鎖在ZeroMQ
實現多線程應用中的基於消息的ZeroMQ框架實現並行/多線程應用程序,而無需使用鎖。
問題>它如何在下面的例子中起作用?
例如:
我們各有兩個客戶端在同一個數據庫中讀取數據,再後來放回去修改結果。
ClientA: Read data A, modified A.value = A.value + 1 then write data A back to database
ClientB: Read data A, modified A.value = A.value + 2 then write data A back to database
問題>我無法弄清楚如何實施與ZeroMQ這樣的系統,這樣我不需要 鎖來控制客戶端A和ClientB的行爲。它如何防止以下 案件發生。
ClientA read data A first
ClientB read data A second
ClientB write data A back // now data.value has been increased by two
ClientA write data A back // now the conflict! because the original value of A has been
// modified by ClientB and ClientA has no information about it.
// If ClientA writes the A back without knowing the update A
// then the changes made by ClientB will be voided.
ZeroMq如何解決這個問題,而不使用它的消息使用鎖定?
謝謝
我認爲ZeroMQ會採取不同的方式。 – q0987 2013-05-02 23:52:25
ZeroMQ正在解決「在獨立進程之間傳遞數據」的不同問題,您的示例是「調解對共享資源的訪問」之一。您可以使用另一種方法實現一個(您可以通過使用鎖來將數據寫入共享資源,或者通過在進程之間使用消息傳遞訪問令牌來在進程之間傳遞數據)。這可能是爲什麼我實施一個鎖而不是做更多的消息-y似乎很奇怪。 – yiding 2013-05-03 00:09:20
我期望看到一個解決方案,它顯示了當併發線程訪問共享數據時,zeromq如何解決經典問題。 – q0987 2013-05-04 03:01:29