[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Chicken-users] ANN: posix-safe-mem

From: Dan Leslie
Subject: [Chicken-users] ANN: posix-safe-mem
Date: Wed, 12 Jun 2013 09:04:58 -0700
User-agent: Mozilla/5.0 (X11; Linux i686; rv:17.0) Gecko/20130221 Thunderbird/17.0.3

Hi all!

After a week  of bus-hacking I've put together a small egg to assist in the creation and management of protected shared memory across processes.

The egg provides a data structure and a handful of routines that encapsulate the creation of a shared memory object, the management of the memory map, a semaphore to block competing processes, and pass counting to allow nested locking within a single process.

shared-mem objects can be created with the various flags and options specified for each of their components, allowing advanced users great flexibility in how they behave. However, for most users it can be as simple as:

(use posix-safe-mem)
;; Create the safe-memory object with an initial value
(define m (make-safe-mem '(1 2 3 4 5)))
;; Fork a worker process
;; ...

;; Now lock and do work
(with-safe-mem m
    (let ((data (safe-mem-get m)))
        ;; Do work on data
        ;; ...
        ;; Now write
        (safe-mem-set! m data)))

Depending on whether the grow or shrink flags are set (both default to #t), the shared memory object will automatically grow or shrink (surprise!) when safe-mem-set! is called, in order to avoid a bus fault. If grow is not set then you risk a bus fault, of course.

The behaviour defaults to copy-on-read, but this too can be switched off via the copy flag. Most users probably want copy-on-read, unless you're intending to work with very large data structures in shared memory. If copy is not set then the same restrictions incurred by any evicted object are applied, including the loss of type information for records.

There's some error checking in the egg but it's not complete, and I have yet to write the full docs. However, a commented test is available:

Please file bugs on github, it would be appreciated! But do please keep it congenial and pleasant. :)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]