如何使用ice-9原子盒与哈希表。

问题描述 投票:0回答:1

我有一个简单的函数,用来缓存值。我使用一个哈希表作为缓存。缓存将从不同的线程中访问,我希望使用 原子箱 用于控制不同线程的访问。到目前为止,我有以下代码

; Define the local hash table we will use.
(define cache (make-atomic-box (make-hash-table)))

(define-public (make-cache ITEM fv)
  (let ((val (hash-ref (atomic-box-ref cache) ITEM)))
      (if val 
        val
        (begin 
          (hash-set! cache ITEM fv) ;;this where I want to use atomic box update functions
          fv
        ))
  )

)

现在,我不清楚如何包装一个原子盒更新函数(atomic-box-set!, atomic-box-swap!atomic-box-compare-and-swap! )周围的 hash-set 函数来添加新的值到哈希表中。

那么我如何使用原子框来更新哈希表呢?

scheme guile
1个回答
0
投票

由于哈希表是可变的,你可以简单地将对哈希表和原子盒的调用堆叠为 (hash-set! (atomic-box-ref cache) ITEM fv).

如果你处理的是一个不可变的值,你需要把这个值复制出来 (atomic-box-ref),并将处理后的值写入(atomic-box-set!)单独进行。atomic-box-swap! 将这两者结合成一个操作。

© www.soinside.com 2019 - 2024. All rights reserved.