Haskell:Как 'atomicModifyIOref' Работа?

Кто-нибудь может объяснить, как работает atomicModifyIORef? В частности:

(1)Ожидает ли он блокировку или оптимистично пытается повторить попытку, если есть конфликт (подобныйTVar).
(2)Почему подписьatomicModifyIORefотличается от подписиmodifyIORef? В частности, что это за дополнительная переменная b?

Редактировать:Я думаю, что нашел ответ на (2), в том, что b— это значение, которое нужно извлечь (это может быть пустым, если не нужно). В однопоточной программе узнать значение тривиально, но в многопоточной программе может потребоваться узнать, каким было предыдущее значение во время применения функции. Я предполагаю, что именно поэтому modifyIORefне имеет этого дополнительного возвращаемого значения (, поскольку такое использование modifyIORefс этим возвращаемым значением, вероятно, должно в любом случае использовать atomicModifyIORef. Однако меня все еще интересует ответ на (1).

26
задан Don Stewart 11 April 2012 в 12:53
поделиться