This is the stmx Reference Manual, version 2.0.5, generated automatically by Declt version 4.0 beta 2 "William Riker" on Sun Dec 15 07:47:22 2024 GMT+0.
stmx/stmx.asd
stmx/asm/package.lisp
stmx/asm/compiler.lisp
stmx/asm/x86-32,64-known.lisp
stmx/asm/x86-32,64-insts.lisp
stmx/asm/x86-32,64-vops.lisp
stmx/asm/cpuid.lisp
stmx/asm/transaction.lisp
stmx/lang/package.lisp
stmx/lang/macro.lisp
stmx/lang/features.lisp
stmx/lang/features-reader.lisp
stmx/lang/thread.lisp
stmx/lang/features-detect.lisp
stmx/lang/hw-transactions.lisp
stmx/lang/atomic-ops.lisp
stmx/lang/mutex.lisp
stmx/lang/atomic-counter.lisp
stmx/lang/cons.lisp
stmx/lang/fast-vector.lisp
stmx/lang/hash-table.lisp
stmx/lang/print.lisp
stmx/lang/class-precedence-list.lisp
stmx/main/package.lisp
stmx/main/version.lisp
stmx/main/global-clock.lisp
stmx/main/tvar-fwd.lisp
stmx/main/classes.lisp
stmx/main/txhash.lisp
stmx/main/tlog.lisp
stmx/main/tvar.lisp
stmx/main/optimize-for.lisp
stmx/main/tvar-slot.lisp
stmx/main/tstruct.lisp
stmx/main/tclass.lisp
stmx/main/tslot.lisp
stmx/main/hw-atomic.lisp
stmx/main/commit.lisp
stmx/main/sw-atomic.lisp
stmx/main/atomic.lisp
stmx/main/orelse.lisp
stmx/util/package.lisp
stmx/util/misc.lisp
stmx/util/print.lisp
stmx/util/container.lisp
stmx/util/tcons.lisp
stmx/util/tcons-list.lisp
stmx/util/tcons-alist.lisp
stmx/util/tcons-set.lisp
stmx/util/tcons-tree.lisp
stmx/util/tcons-higher.lisp
stmx/util/tvar.lisp
stmx/util/tcell.lisp
stmx/util/tstack.lisp
stmx/util/tfifo.lisp
stmx/util/tchannel.lisp
stmx/util/bheap.lisp
stmx/util/gmap.lisp
stmx/util/rbmap.lisp
stmx/util/tmap.lisp
stmx/util/simple-tvector.lisp
stmx/util/ghash-table.lisp
stmx/util/thash-table.lisp
The main system appears first, followed by any subsystem dependency.
Modules are listed depth-first from the system components tree.
stmx/asm
stmx
(system).
package.lisp
(file).
compiler.lisp
(file).
x86-32,64-known.lisp
(file).
x86-32,64-insts.lisp
(file).
x86-32,64-vops.lisp
(file).
cpuid.lisp
(file).
transaction.lisp
(file).
stmx/lang
asm
(module).
stmx
(system).
package.lisp
(file).
macro.lisp
(file).
features.lisp
(file).
features-reader.lisp
(file).
thread.lisp
(file).
features-detect.lisp
(file).
hw-transactions.lisp
(file).
atomic-ops.lisp
(file).
mutex.lisp
(file).
atomic-counter.lisp
(file).
cons.lisp
(file).
fast-vector.lisp
(file).
hash-table.lisp
(file).
print.lisp
(file).
class-precedence-list.lisp
(file).
stmx/main
lang
(module).
stmx
(system).
package.lisp
(file).
version.lisp
(file).
global-clock.lisp
(file).
tvar-fwd.lisp
(file).
classes.lisp
(file).
txhash.lisp
(file).
tlog.lisp
(file).
tvar.lisp
(file).
optimize-for.lisp
(file).
tvar-slot.lisp
(file).
tstruct.lisp
(file).
tclass.lisp
(file).
tslot.lisp
(file).
hw-atomic.lisp
(file).
commit.lisp
(file).
sw-atomic.lisp
(file).
atomic.lisp
(file).
orelse.lisp
(file).
stmx/util
stmx
(system).
package.lisp
(file).
misc.lisp
(file).
print.lisp
(file).
container.lisp
(file).
tcons.lisp
(file).
tcons-list.lisp
(file).
tcons-alist.lisp
(file).
tcons-set.lisp
(file).
tcons-tree.lisp
(file).
tcons-higher.lisp
(file).
tvar.lisp
(file).
tcell.lisp
(file).
tstack.lisp
(file).
tfifo.lisp
(file).
tchannel.lisp
(file).
bheap.lisp
(file).
gmap.lisp
(file).
rbmap.lisp
(file).
tmap.lisp
(file).
simple-tvector.lisp
(file).
ghash-table.lisp
(file).
thash-table.lisp
(file).
Files are sorted by type and then listed depth-first from the systems components trees.
stmx/stmx.asd
stmx/asm/package.lisp
stmx/asm/compiler.lisp
stmx/asm/x86-32,64-known.lisp
stmx/asm/x86-32,64-insts.lisp
stmx/asm/x86-32,64-vops.lisp
stmx/asm/cpuid.lisp
stmx/asm/transaction.lisp
stmx/lang/package.lisp
stmx/lang/macro.lisp
stmx/lang/features.lisp
stmx/lang/features-reader.lisp
stmx/lang/thread.lisp
stmx/lang/features-detect.lisp
stmx/lang/hw-transactions.lisp
stmx/lang/atomic-ops.lisp
stmx/lang/mutex.lisp
stmx/lang/atomic-counter.lisp
stmx/lang/cons.lisp
stmx/lang/fast-vector.lisp
stmx/lang/hash-table.lisp
stmx/lang/print.lisp
stmx/lang/class-precedence-list.lisp
stmx/main/package.lisp
stmx/main/version.lisp
stmx/main/global-clock.lisp
stmx/main/tvar-fwd.lisp
stmx/main/classes.lisp
stmx/main/txhash.lisp
stmx/main/tlog.lisp
stmx/main/tvar.lisp
stmx/main/optimize-for.lisp
stmx/main/tvar-slot.lisp
stmx/main/tstruct.lisp
stmx/main/tclass.lisp
stmx/main/tslot.lisp
stmx/main/hw-atomic.lisp
stmx/main/commit.lisp
stmx/main/sw-atomic.lisp
stmx/main/atomic.lisp
stmx/main/orelse.lisp
stmx/util/package.lisp
stmx/util/misc.lisp
stmx/util/print.lisp
stmx/util/container.lisp
stmx/util/tcons.lisp
stmx/util/tcons-list.lisp
stmx/util/tcons-alist.lisp
stmx/util/tcons-set.lisp
stmx/util/tcons-tree.lisp
stmx/util/tcons-higher.lisp
stmx/util/tvar.lisp
stmx/util/tcell.lisp
stmx/util/tstack.lisp
stmx/util/tfifo.lisp
stmx/util/tchannel.lisp
stmx/util/bheap.lisp
stmx/util/gmap.lisp
stmx/util/rbmap.lisp
stmx/util/tmap.lisp
stmx/util/simple-tvector.lisp
stmx/util/ghash-table.lisp
stmx/util/thash-table.lisp
stmx/asm/compiler.lisp
package.lisp
(file).
asm
(module).
+impl-package+
(constant).
compile-if
(function).
compile-if-package
(function).
compile-if-symbol
(function).
find-symbol*
(function).
symbol-name*
(function).
+defknown-has-overwrite-fndb-silently+
(constant).
compile-if-sbcl-disassem<=32-bit
(function).
compile-if-sbcl-lacks-rtm-instructions
(function).
defknown
(macro).
int-list>=
(function).
lisp-version>=
(function).
split-string
(function).
string-to-int-list
(function).
stmx/asm/x86-32,64-known.lisp
compiler.lisp
(file).
asm
(module).
stmx/asm/x86-32,64-insts.lisp
x86-32,64-known.lisp
(file).
asm
(module).
stmx/asm/x86-32,64-vops.lisp
x86-32,64-insts.lisp
(file).
asm
(module).
+transaction-started+
(constant).
stmx/asm/cpuid.lisp
x86-32,64-vops.lisp
(file).
asm
(module).
cpuid
(function).
lock-elision-supported-p
(function).
transaction-supported-p
(function).
stmx/asm/transaction.lisp
x86-32,64-vops.lisp
(file).
asm
(module).
+transaction-user-abort+
(constant).
transaction-abort
(function).
transaction-begin
(function).
transaction-end
(function).
transaction-rerun-may-succeed-p
(function).
transaction-running-p
(function).
%transaction-begin
(function).
%transaction-end
(function).
%transaction-running-p
(function).
transaction-abort-macro
(macro).
stmx/lang/macro.lisp
package.lisp
(file).
lang
(module).
aif
(macro).
awhen
(macro).
concat-symbols
(function).
do-tree
(macro).
eval-always
(macro).
if-bind
(macro).
let1
(macro).
log.debug
(macro).
log.make-logger
(macro).
log.trace
(macro).
new
(macro).
stringify
(function).
when-bind
(macro).
with-gensym
(macro).
with-gensyms
(macro).
+it+
(special variable).
visit-tree
(function).
stmx/lang/features.lisp
macro.lisp
(file).
lang
(module).
all-features
(function).
assoc-feature
(function).
default-feature
(function).
default-features
(function).
get-feature
(function).
set-feature
(function).
set-features
(function).
*feature-list*
(special variable).
clear-features
(function).
intern-feature
(function).
rem-feature
(function).
some-features
(function).
stmx/lang/features-reader.lisp
features.lisp
(file).
lang
(module).
enable-#?-syntax
(macro).
%enable-#?-syntax
(function).
compile-ensure-1-arg
(function).
compile-ensure-2-args
(function).
compile-if-and
(function).
compile-if-eql
(function).
compile-if-error
(function).
compile-if-eval
(function).
compile-if-not
(function).
compile-if-or
(function).
compile-if-symbol
(function).
compile-if-transformer
(function).
stmx/lang/thread.lisp
features-reader.lisp
(file).
lang
(module).
*current-thread*
(special variable).
ensure-thread-initial-binding
(function).
ensure-thread-initial-bindings
(function).
save-thread-initial-bindings
(macro).
start-multithreading
(function).
start-thread
(function).
wait4-thread
(function).
compile-log-warn
(macro).
detect-thread-support
(function).
stmx/lang/features-detect.lisp
thread.lisp
(file).
lang
(module).
define-constant-once
(macro).
define-global
(macro).
stmx/lang/hw-transactions.lisp
features-detect.lisp
(file).
lang
(module).
+hw-transaction-started+
(constant).
+hw-transaction-supported+
(constant).
hw-transaction-abort
(macro).
hw-transaction-begin
(macro).
hw-transaction-end
(macro).
hw-transaction-rerun-may-succeed?
(macro).
hw-transaction-running?
(macro).
hw-transaction-supported-and-running?
(macro).
hw-transaction-supported?
(macro).
stmx/lang/atomic-ops.lisp
features-detect.lisp
(file).
lang
(module).
atomic-compare-and-swap
(macro).
atomic-decf
(macro).
atomic-incf
(macro).
atomic-num
(type).
atomic-pop
(macro).
mem-read-barrier
(macro).
mem-write-barrier
(macro).
atomic-push
(macro).
atomic-t
(type).
stmx/lang/mutex.lisp
atomic-ops.lisp
(file).
lang
(module).
make-mutex
(function).
mutex
(structure).
mutex-is-free?
(function).
mutex-is-own-or-free?
(function).
mutex-is-own?
(function).
mutex-owner
(reader).
(setf mutex-owner)
(writer).
release-mutex
(function).
try-acquire-mutex
(function).
with-lock
(macro).
%make-mutex
(function).
copy-mutex
(function).
lock-owner
(function).
mutex-p
(function).
stmx/lang/atomic-counter.lisp
atomic-ops.lisp
(file).
mutex.lisp
(file).
lang
(module).
atomic-counter
(structure).
atomic-counter-num
(type).
atomic-counter-slot-type
(type).
get-atomic-counter
(function).
get-atomic-counter-plus-delta
(function).
get-atomic-place
(macro).
get-atomic-place-plus-delta
(macro).
incf-atomic-counter
(function).
incf-atomic-place
(macro).
make-atomic-counter
(function).
set-atomic-counter
(function).
set-atomic-place
(macro).
%make-atomic-counter
(function).
atomic-counter-p
(function).
atomic-counter-version
(reader).
(setf atomic-counter-version)
(writer).
copy-atomic-counter
(function).
positive-fixnum
(type).
stmx/lang/cons.lisp
thread.lisp
(file).
lang
(module).
cons^
(function).
free-cons^
(function).
free-list^
(function).
pop-free-cons^
(macro).
push^
(macro).
*cons-pool*
(special variable).
stmx/lang/fast-vector.lisp
macro.lisp
(file).
lang
(module).
do-fast-vector
(macro).
fast-vector
(structure).
fast-vector-capacity
(function).
fast-vector-clear
(function).
fast-vector-length
(function).
fast-vector-pop
(function).
fast-vector-pop-macro
(macro).
fast-vector-push
(function).
fast-vector-push-extend
(function).
make-fast-vector
(function).
%make-fast-vector
(function).
+empty-vector+
(special variable).
copy-fast-vector
(function).
fast-vector-initial-element
(reader).
(setf fast-vector-initial-element)
(writer).
fast-vector-len
(reader).
(setf fast-vector-len)
(writer).
fast-vector-make-array
(function).
fast-vector-p
(function).
fast-vector-vec
(reader).
(setf fast-vector-vec)
(writer).
stmx/lang/hash-table.lisp
cons.lisp
(file).
lang
(module).
clear-hash
(function).
copy-hash-table
(function).
do-hash
(macro).
get-hash
(function).
(setf get-hash)
(function).
hash-table-keys
(function).
hash-table-pairs
(function).
hash-table-values
(function).
merge-hash-tables
(function).
rem-hash
(function).
set-hash
(function).
incf-hash-counter
(macro).
stmx/lang/print.lisp
macro.lisp
(file).
lang
(module).
defprint-object
(macro).
id-of
(generic function).
(setf id-of)
(generic function).
~
(function).
(setf ~)
(function).
*print-ids*
(special variable).
compute-id-of
(function).
stmx/lang/class-precedence-list.lisp
macro.lisp
(file).
lang
(module).
clos-compute-class-precedence-list
(function).
clos-tie-breaker-rule
(function).
collect-all-superclasses
(function).
collect-superclasses
(function).
local-precedence-ordering
(function).
mapappend
(function).
topological-sort
(function).
stmx/main/version.lisp
package.lisp
(file).
main
(module).
*stmx-version*
(special variable).
stmx-internal-error
(function).
stmx-internal-error/bug
(function).
stmx/main/global-clock.lisp
package.lisp
(file).
main
(module).
make-load-form
(method).
%gv-expand
(macro).
%gv-expand0-f
(function).
%gv-nohw-flag
(macro).
%gvx-expand
(macro).
%gvx-expand0-f
(function).
*lv*
(special variable).
+global-clock-delta+
(constant).
+global-clock-nohw-delta+
(constant).
+gv+
(constant).
+gv-max-stat+
(constant).
copy-gv156
(function).
copy-lv156
(function).
global-clock/decf-nohw-counter
(macro).
global-clock/features
(macro).
global-clock/get-nohw-counter
(macro).
global-clock/hw/after-abort
(macro).
global-clock/hw/start-read
(macro).
global-clock/hw/start-write
(macro).
global-clock/hw/stat-aborted
(macro).
global-clock/hw/stat-committed
(macro).
global-clock/hw/write
(macro).
global-clock/incf-nohw-counter
(macro).
global-clock/publish-features
(function).
global-clock/sw/after-abort
(macro).
global-clock/sw/start-read
(macro).
global-clock/sw/start-write
(macro).
global-clock/sw/stat-aborted
(macro).
global-clock/sw/stat-committed
(macro).
global-clock/sw/write
(macro).
global-clock/valid-read?
(macro).
global-clock/version-type
(type).
gv1/after-abort
(macro).
gv1/decf-nohw-counter
(macro).
gv1/features
(macro).
gv1/get-nohw-counter
(macro).
gv1/hw/after-abort
(macro).
gv1/hw/start-read
(macro).
gv1/hw/start-write
(macro).
gv1/hw/stat-aborted
(macro).
gv1/hw/stat-committed
(macro).
gv1/hw/write
(macro).
gv1/incf-nohw-counter
(macro).
gv1/start-read
(macro).
gv1/start-write
(macro).
gv1/stat-aborted
(macro).
gv1/stat-committed
(macro).
gv1/sw/after-abort
(macro).
gv1/sw/start-read
(macro).
gv1/sw/start-write
(macro).
gv1/sw/stat-aborted
(macro).
gv1/sw/stat-committed
(macro).
gv1/sw/write
(macro).
gv1/valid-read?
(macro).
gv1/version-type
(type).
gv1/write
(macro).
gv156
(structure).
gv156-aborts
(reader).
(setf gv156-aborts)
(writer).
gv156-commits
(reader).
(setf gv156-commits)
(writer).
gv156-nohw-counter
(reader).
(setf gv156-nohw-counter)
(writer).
gv156-nohw-flag
(reader).
(setf gv156-nohw-flag)
(writer).
gv156-p
(function).
gv156-pad1
(reader).
(setf gv156-pad1)
(writer).
gv156-pad2
(reader).
(setf gv156-pad2)
(writer).
gv156-pad3
(reader).
(setf gv156-pad3)
(writer).
gv156-pad4
(reader).
(setf gv156-pad4)
(writer).
gv156-pad5
(reader).
(setf gv156-pad5)
(writer).
gv156-pad6
(reader).
(setf gv156-pad6)
(writer).
gv156-pad7
(reader).
(setf gv156-pad7)
(writer).
gv156-version
(function).
(setf gv156-version)
(function).
gv156/version-type
(type).
gv5/after-abort
(macro).
gv5/decf-nohw-counter
(macro).
gv5/features
(macro).
gv5/get-nohw-counter
(macro).
gv5/hw/after-abort
(macro).
gv5/hw/start-read
(macro).
gv5/hw/start-write
(macro).
gv5/hw/stat-aborted
(macro).
gv5/hw/stat-committed
(macro).
gv5/hw/write
(macro).
gv5/incf-nohw-counter
(macro).
gv5/start-read
(macro).
gv5/start-write
(macro).
gv5/stat-aborted
(macro).
gv5/stat-committed
(macro).
gv5/sw/after-abort
(macro).
gv5/sw/start-read
(macro).
gv5/sw/start-write
(macro).
gv5/sw/stat-aborted
(macro).
gv5/sw/stat-committed
(macro).
gv5/sw/write
(macro).
gv5/valid-read?
(macro).
gv5/version-type
(type).
gv5/write
(macro).
gv6/%is-gv5-mode?
(macro).
gv6/%set-gv1-mode
(function).
gv6/%set-gv5-mode
(function).
gv6/%update-gv-stat
(function).
gv6/%update-lv-stat
(macro).
gv6/decf-nohw-counter
(macro).
gv6/features
(macro).
gv6/get-nohw-counter
(macro).
gv6/hw/after-abort
(macro).
gv6/hw/start-read
(macro).
gv6/hw/start-write
(macro).
gv6/hw/stat-aborted
(macro).
gv6/hw/stat-committed
(macro).
gv6/hw/write
(macro).
gv6/incf-nohw-counter
(macro).
gv6/stat-aborted
(macro).
gv6/stat-committed
(macro).
gv6/sw/after-abort
(macro).
gv6/sw/start-read
(macro).
gv6/sw/start-write
(macro).
gv6/sw/stat-aborted
(macro).
gv6/sw/stat-committed
(macro).
gv6/sw/write
(macro).
gv6/valid-read?
(macro).
gv6/version-type
(type).
gvx-add-missing
(macro).
lv156
(structure).
lv156-aborts
(reader).
(setf lv156-aborts)
(writer).
lv156-commits
(reader).
(setf lv156-commits)
(writer).
lv156-p
(function).
make-gv156
(function).
make-lv156
(function).
version-type
(type).
stmx/main/tvar-fwd.lisp
global-clock.lisp
(file).
main
(module).
+unbound-tvar+
(constant).
id-of
(method).
transactional
(type).
tvar
(structure).
%tvar-version-and-value
(function).
*tvar-id*
(special variable).
+invalid-version+
(constant).
copy-tvar
(function).
get-next-id
(function).
make-tvar
(function).
raw-value-of
(function).
set-tvar-value-and-version
(function).
try-lock-tvar
(function).
tvar-id
(reader).
tvar-id/next
(macro).
tvar-p
(function).
tvar-value
(reader).
(setf tvar-value)
(writer).
tvar-value-and-version-or-fail
(function).
tvar-version
(reader).
(setf tvar-version)
(writer).
tvar-waiting-for
(reader).
(setf tvar-waiting-for)
(writer).
tvar-waiting-lock
(reader).
unlock-tvar
(function).
stmx/main/classes.lisp
tvar-fwd.lisp
(file).
main
(module).
id-of
(method).
retry
(function).
transaction?
(function).
%make-txfifo
(function).
%make-txhash-table
(function).
*hide-tvars*
(special variable).
*hw-tlog-write-version*
(special variable).
*record-to-tlogs*
(special variable).
*tlog*
(special variable).
+txhash-default-capacity+
(constant).
compile-cerror
(macro).
compile-error
(macro).
copy-tlog
(function).
copy-txfifo
(function).
copy-txhash-table
(function).
copy-txpair
(function).
current-tlog
(macro).
hide-tvars?
(function).
hw-tlog-write-version
(macro).
hw-transaction?
(function).
make-tlog
(function).
make-txfifo
(function).
make-txhash-table
(function).
maybe-yield-before-rerun
(macro).
recording?
(function).
rerun
(function).
rerun-error
(condition).
retry-error
(condition).
stmx.compile-error
(condition).
stmx.control-error
(condition).
sw-transaction?
(function).
tlog
(structure).
tlog-after-commit
(reader).
(setf tlog-after-commit)
(writer).
tlog-before-commit
(reader).
(setf tlog-before-commit)
(writer).
tlog-func-vector
(type).
tlog-lock
(reader).
(setf tlog-lock)
(writer).
tlog-locked
(reader).
tlog-p
(function).
tlog-parent
(reader).
(setf tlog-parent)
(writer).
tlog-prevent-sleep
(reader).
(setf tlog-prevent-sleep)
(writer).
tlog-read-version
(reader).
(setf tlog-read-version)
(writer).
tlog-reads
(reader).
(setf tlog-reads)
(writer).
tlog-semaphore
(reader).
(setf tlog-semaphore)
(writer).
tlog-writes
(reader).
(setf tlog-writes)
(writer).
txfifo
(structure).
txfifo-back
(reader).
(setf txfifo-back)
(writer).
txfifo-front
(reader).
(setf txfifo-front)
(writer).
txfifo-p
(function).
txhash-table
(structure).
txhash-table-count
(reader).
(setf txhash-table-count)
(writer).
txhash-table-p
(function).
txhash-table-pool
(reader).
(setf txhash-table-pool)
(writer).
txhash-table-vec
(reader).
(setf txhash-table-vec)
(writer).
txpair
(function).
txpair
(structure).
txpair-key
(reader).
(setf txpair-key)
(writer).
txpair-next
(reader).
(setf txpair-next)
(writer).
txpair-p
(function).
txpair-rest
(reader).
(setf txpair-rest)
(writer).
txpair-value
(reader).
(setf txpair-value)
(writer).
with-recording
(macro).
with-recording-to-tlog
(macro).
with-tlog
(macro).
without-recording-with-show-tvars
(macro).
stmx/main/txhash.lisp
classes.lisp
(file).
main
(module).
print-object
(method).
+dummy-tvar+
(special variable).
+txhash-threshold-capacity+
(constant).
add-txpair-to-pool
(function).
clear-txfifo
(function).
clear-txhash
(function).
copy-txhash-table-into
(function).
do-filter-txfifo
(macro).
do-filter-txfifo-entries
(macro).
do-txfifo
(macro).
do-txfifo-entries
(macro).
do-txhash
(macro).
do-txhash-entries
(macro).
find-txhash
(function).
get-txhash
(function).
merge-txhash-tables
(function).
new-txpair-from-pool
(function).
put-txfifo
(function).
rehash-txhash
(function).
set-txhash
(function).
txhash-mask
(function).
txhash-subscript
(function).
stmx/main/tlog.lisp
txhash.lisp
(file).
main
(module).
print-object
(method).
%validate-tlog-pool
(function).
*tlog-pool*
(special variable).
clear-tlog
(function).
free-tlog
(function).
listen-tvars-of
(function).
make-tlog-pool
(function).
new-or-clear-tlog
(function).
new-tlog
(function).
notify-tlog
(function).
stmx-internal-error/suggest-bordeaux-threads
(function).
unlisten-tvars-of
(function).
validate-current-thread
(function).
validate-tlog-pool
(macro).
wait-once
(function).
wait-tlog
(function).
stmx/main/tvar.lisp
tlog.lisp
(file).
main
(module).
(setf $)
(setf expander).
$
(function).
print-object
(method).
tvar
(function).
(setf $-notx)
(setf expander).
$-notx
(function).
(setf $-swtx)
(setf expander).
$-swtx
(function).
listen-tvar
(function).
notify-tvar
(function).
notify-tvar-high-load
(function).
(setf raw-value-of)
(function).
set-$
(function).
set-$-notx
(function).
set-$-swtx
(function).
tvar-valid-and-own-or-unlocked?
(function).
tvar-valid-and-unlocked?
(function).
tx-read-of
(function).
tx-write-of
(function).
unbound-tvar-error
(function).
unlisten-tvar
(function).
use-$-hwtx?
(macro).
use-$-swtx?
(macro).
stmx/main/optimize-for.lisp
tvar.lisp
(file).
main
(module).
optimize-for-transaction
(macro).
optimize-for-transaction*
(macro).
*optimized-funs*
(special variable).
add-optimized-fun
(function).
add-optimized-fun*
(function).
bind-optimized-fun
(function).
compiling-transaction
(type).
extract-declares
(function).
extract-docstrings
(function).
lambda-list-param-to-arg
(function).
lambda-list-param-to-arg-set-p
(function).
lambda-list-quote-default-forms
(function).
lambda-list-to-args
(function).
options-for-defun
(macro).
param-quote-default-form
(function).
with-declares
(macro).
with-docstrings
(macro).
with-docstrings-declares
(macro).
with-hwtx
(macro).
with-notx
(macro).
with-swtx
(macro).
with-tx
(macro).
stmx/main/tvar-slot.lisp
optimize-for.lisp
(file).
main
(module).
(setf $-slot)
(setf expander).
$-slot
(function).
bound-$?
(function).
unbind-$
(function).
%stmx-impl/notx-set/$-slot
(function).
(setf %stmx-impl/notx/$-slot)
(setf expander).
%stmx-impl/notx/$-slot
(function).
%stmx-impl/notx/bound-$?
(function).
%stmx-impl/notx/peek-$
(function).
%stmx-impl/notx/try-put-$
(function).
%stmx-impl/notx/try-take-$
(function).
%stmx-impl/notx/unbind-$
(function).
%stmx-impl/swtx-set/$-slot
(function).
(setf %stmx-impl/swtx/$-slot)
(setf expander).
%stmx-impl/swtx/$-slot
(function).
%stmx-impl/swtx/bound-$?
(function).
%stmx-impl/swtx/peek-$
(function).
%stmx-impl/swtx/try-put-$
(function).
%stmx-impl/swtx/try-take-$
(function).
%stmx-impl/swtx/unbind-$
(function).
%stmx-impl/tx-set/$-slot
(function).
peek-$
(function).
try-put-$
(function).
try-take-$
(function).
value-of
(generic function).
(setf value-of)
(generic function).
stmx/main/tstruct.lisp
tvar-slot.lisp
(file).
main
(module).
analyze-struct
(macro).
non-transactional-struct
(macro).
transactional-struct
(macro).
%impl/names-to-symbol
(function).
copy-tstruct-def
(function).
copy-tstruct-slot
(function).
define-tstruct-slot-accessor
(macro).
do-loop-tstruct-defs
(macro).
do-tstruct-defs
(macro).
make-load-form/tstruct-def
(function).
make-load-form/tstruct-slot
(function).
make-tstruct-def
(function).
make-tstruct-slot
(function).
names-to-symbol
(function).
parse-struct-def
(function).
parse-struct-def-and-slots
(function).
parse-struct-slot
(function).
parse-struct-slots
(function).
symbol-package-or-fail
(function).
tstruct-def
(generic function).
tstruct-def
(structure).
tstruct-def->all
(function).
tstruct-def->defmethod-tstruct-def
(function).
tstruct-def->defun-accessor
(function).
tstruct-def->defun-accessors
(function).
tstruct-def->defun-constructor
(function).
tstruct-def->defun-copier
(function).
tstruct-def->defun-functions
(function).
tstruct-def->form
(function).
tstruct-def->tx-accessors
(function).
tstruct-def->tx-functions
(function).
tstruct-def-all-slots
(function).
tstruct-def-conc-name
(reader).
(setf tstruct-def-conc-name)
(writer).
tstruct-def-constructor
(reader).
(setf tstruct-def-constructor)
(writer).
tstruct-def-copier
(reader).
(setf tstruct-def-copier)
(writer).
tstruct-def-name
(reader).
(setf tstruct-def-name)
(writer).
tstruct-def-options
(reader).
(setf tstruct-def-options)
(writer).
tstruct-def-p
(function).
tstruct-def-package
(function).
tstruct-def-slots
(reader).
(setf tstruct-def-slots)
(writer).
tstruct-def-superclass
(reader).
(setf tstruct-def-superclass)
(writer).
tstruct-def-tx-conc-name
(function).
tstruct-def-tx-constructor
(function).
tstruct-def-type
(reader).
(setf tstruct-def-type)
(writer).
tstruct-slot
(structure).
tstruct-slot->form
(function).
tstruct-slot-default-accessor
(function).
tstruct-slot-effective-reader
(function).
tstruct-slot-effective-writer
(function).
tstruct-slot-initform
(reader).
(setf tstruct-slot-initform)
(writer).
tstruct-slot-initialize
(function).
tstruct-slot-keyword
(function).
tstruct-slot-name
(reader).
(setf tstruct-slot-name)
(writer).
tstruct-slot-options
(reader).
(setf tstruct-slot-options)
(writer).
tstruct-slot-p
(function).
tstruct-slot-read-only
(reader).
(setf tstruct-slot-read-only)
(writer).
tstruct-slot-reader
(reader).
(setf tstruct-slot-reader)
(writer).
tstruct-slot-transactional
(reader).
(setf tstruct-slot-transactional)
(writer).
tstruct-slot-tx-accessor
(function).
tstruct-slot-type
(reader).
(setf tstruct-slot-type)
(writer).
tstruct-slot-writer
(reader).
(setf tstruct-slot-writer)
(writer).
stmx/main/tclass.lisp
tvar-slot.lisp
(file).
tstruct.lisp
(file).
main
(module).
compute-effective-slot-definition
(method).
direct-slot-definition-class
(method).
effective-slot-definition-class
(method).
transactional
(macro).
transactional-class
(macro).
transactional-class
(class).
transactional-object
(class).
validate-superclass
(method).
*recursive-call-compute-effective-slot-definition*
(special variable).
*recursive-call-list-classes-containing-direct-slots*
(special variable).
adjust-transactional-slot-form
(function).
adjust-transactional-slot-forms
(function).
cerror-tclass-slot-change
(function).
check-tclass-slot-change
(function).
check-tclass-slot-name
(function).
copy-slot-form
(function).
define-method-initialize-instance
(macro).
do-class-transactional-direct-slots
(macro).
do-class-transactional-effective-slots
(macro).
ensure-transactional-object-among-superclasses
(function).
error-tclass-slot-name
(function).
find-class-or-nil
(function).
find-slot-by-name
(function).
find-slot-form-by-name
(function).
list-class-transactional-direct-slots
(function).
list-classes-containing-direct-slots
(function).
list-direct-slot-in-superclasses
(function).
set-assoc
(function).
set-assoc*
(function).
slot-form-name
(function).
slot-form-transactional?
(function).
transactional-direct-slot
(class).
transactional-effective-slot
(class).
transactional-slot?
(generic function).
(setf transactional-slot?)
(writer method).
(setf transactional-slot?)
(writer method).
tvar-unwrap-slot
(function).
tvar-unwrap-slot-macro
(macro).
tvar-wrap-slot
(function).
tvar-wrap-slot-macro
(macro).
typespec-allows?
(function).
undefine-method
(function).
undefine-method-before
(function).
stmx/main/tslot.lisp
tclass.lisp
(file).
main
(module).
slot-boundp-using-class
(method).
slot-makunbound-using-class
(method).
(setf slot-value-using-class)
(method).
slot-value-using-class
(method).
update-instance-for-redefined-class
(method).
slot-raw-tvar
(macro).
unbound-slot-error
(function).
stmx/main/hw-atomic.lisp
classes.lisp
(file).
main
(module).
hw-atomic2
(macro).
%hw-atomic2
(macro).
+hw-atomic-max-attempts+
(constant).
stmx/main/commit.lisp
tvar.lisp
(file).
hw-atomic.lisp
(file).
main
(module).
after-commit
(macro).
before-commit
(macro).
call-after-commit
(function).
call-before-commit
(function).
commit
(function).
commit-nested
(function).
commit-sw-update-tvars
(function).
ensure-tlog-after-commit
(function).
ensure-tlog-before-commit
(function).
invalid?
(function).
invoke-after-commit
(function).
invoke-before-commit
(function).
loop-funcall-on-appendable-vector
(function).
merge-tlog-reads
(function).
shallow-invalid?
(function).
shallow-valid?
(function).
try-lock-tvars
(function).
tvar>
(function).
unlock-tvars
(function).
valid-and-own-or-unlocked?
(function).
valid-and-unlocked?
(function).
valid?
(function).
stmx/main/sw-atomic.lisp
commit.lisp
(file).
main
(module).
transaction
(macro).
%run-sw-atomic
(function).
fast-sw-atomic
(macro).
run-once
(function).
run-sw-atomic
(function).
sw-atomic
(macro).
stmx/main/atomic.lisp
hw-atomic.lisp
(file).
sw-atomic.lisp
(file).
main
(module).
atomic
(macro).
fast-atomic
(macro).
run-atomic
(function).
hw-transaction-test
(function).
stmx/main/orelse.lisp
atomic.lisp
(file).
main
(module).
nonblocking
(macro).
orelse
(macro).
run-orelse
(function).
copy-orelse-tx
(function).
find-first-rerun-tx
(function).
free-tx-logs
(function).
make-orelse-tx
(function).
merge-tlog-reads-tx
(function).
orelse-error
(condition).
orelse-tx
(structure).
orelse-tx-func
(reader).
(setf orelse-tx-func)
(writer).
orelse-tx-log
(reader).
(setf orelse-tx-log)
(writer).
orelse-tx-p
(function).
orelse-tx-retry
(reader).
(setf orelse-tx-retry)
(writer).
run-nonblocking
(function).
stmx/util/misc.lisp
package.lisp
(file).
util
(module).
fixnum/=
(function).
fixnum<
(function).
fixnum=
(function).
fixnum>
(function).
sxhash-equalp
(function).
%sxhash-equalp
(macro).
_
(macro).
comp-result
(type).
compare-keys
(function).
k<
(constant).
k=
(constant).
k>
(constant).
ufixnum
(type).
with-ro-slots
(macro).
with-rw-slots
(macro).
stmx/util/print.lisp
package.lisp
(file).
util
(module).
print-object-contents
(generic function).
stmx/util/container.lisp
stmx/util/tcons.lisp
misc.lisp
(file).
util
(module).
make-tlist
(function).
print-object
(method).
tatom
(function).
(setf tcar)
(setf expander).
tcar
(function).
(setf tcdr)
(setf expander).
tcdr
(function).
tcons
(function).
tcons
(structure).
tconsp
(function).
(setf tfirst)
(setf expander).
tfirst
(function).
tlist
(compiler macro).
tlist
(function).
tlist
(type).
tlist*
(compiler macro).
tlist*
(function).
tpop
(macro).
tpush
(macro).
(setf trest)
(setf expander).
trest
(function).
%stmx-impl/notx-set/tcar
(function).
%stmx-impl/notx-set/tcdr
(function).
%stmx-impl/notx-set/tcons-first
(function).
%stmx-impl/notx-set/tcons-rest
(function).
%stmx-impl/notx-set/tfirst
(function).
%stmx-impl/notx-set/trest
(function).
(setf %stmx-impl/notx/tcar)
(setf expander).
%stmx-impl/notx/tcar
(function).
(setf %stmx-impl/notx/tcdr)
(setf expander).
%stmx-impl/notx/tcdr
(function).
(setf %stmx-impl/notx/tcons-first)
(setf expander).
%stmx-impl/notx/tcons-first
(function).
(setf %stmx-impl/notx/tcons-rest)
(setf expander).
%stmx-impl/notx/tcons-rest
(function).
(setf %stmx-impl/notx/tfirst)
(setf expander).
%stmx-impl/notx/tfirst
(function).
(setf %stmx-impl/notx/trest)
(setf expander).
%stmx-impl/notx/trest
(function).
%stmx-impl/notx/trplaca
(function).
%stmx-impl/notx/trplacd
(function).
%stmx-impl/swtx-set/tcar
(function).
%stmx-impl/swtx-set/tcdr
(function).
%stmx-impl/swtx-set/tcons-first
(function).
%stmx-impl/swtx-set/tcons-rest
(function).
%stmx-impl/swtx-set/tfirst
(function).
%stmx-impl/swtx-set/trest
(function).
(setf %stmx-impl/swtx/tcar)
(setf expander).
%stmx-impl/swtx/tcar
(function).
(setf %stmx-impl/swtx/tcdr)
(setf expander).
%stmx-impl/swtx/tcdr
(function).
(setf %stmx-impl/swtx/tcons-first)
(setf expander).
%stmx-impl/swtx/tcons-first
(function).
(setf %stmx-impl/swtx/tcons-rest)
(setf expander).
%stmx-impl/swtx/tcons-rest
(function).
(setf %stmx-impl/swtx/tfirst)
(setf expander).
%stmx-impl/swtx/tfirst
(function).
(setf %stmx-impl/swtx/trest)
(setf expander).
%stmx-impl/swtx/trest
(function).
%stmx-impl/swtx/trplaca
(function).
%stmx-impl/swtx/trplacd
(function).
%stmx-impl/tstruct/make-tcons
(function).
%stmx-impl/tstruct/tcons-first
(reader).
(setf %stmx-impl/tstruct/tcons-first)
(writer).
%stmx-impl/tstruct/tcons-rest
(reader).
(setf %stmx-impl/tstruct/tcons-rest)
(writer).
%stmx-impl/tx-set/tcar
(function).
%stmx-impl/tx-set/tcdr
(function).
%stmx-impl/tx-set/tcons-first
(function).
%stmx-impl/tx-set/tcons-rest
(function).
%stmx-impl/tx-set/tfirst
(function).
%stmx-impl/tx-set/trest
(function).
copy-tcons
(function).
do-tlist
(macro).
make-tcons
(function).
(setf tcons-first)
(setf expander).
tcons-first
(function).
(setf tcons-rest)
(setf expander).
tcons-rest
(function).
tlistp
(function).
trplaca
(function).
trplacd
(function).
tstruct-def
(method).
stmx/util/tcons-list.lisp
tcons.lisp
(file).
util
(module).
tcaaaar
(function).
(setf tcaaaar)
(function).
tcaaadr
(function).
(setf tcaaadr)
(function).
tcaaar
(function).
(setf tcaaar)
(function).
tcaadar
(function).
(setf tcaadar)
(function).
tcaaddr
(function).
(setf tcaaddr)
(function).
tcaadr
(function).
(setf tcaadr)
(function).
tcaar
(function).
(setf tcaar)
(function).
tcadaar
(function).
(setf tcadaar)
(function).
tcadadr
(function).
(setf tcadadr)
(function).
tcadar
(function).
(setf tcadar)
(function).
tcaddar
(function).
(setf tcaddar)
(function).
tcaddr
(function).
(setf tcaddr)
(function).
tcadr
(function).
(setf tcadr)
(function).
tcdaaar
(function).
(setf tcdaaar)
(function).
tcdaadr
(function).
(setf tcdaadr)
(function).
tcdaar
(function).
(setf tcdaar)
(function).
tcdadar
(function).
(setf tcdadar)
(function).
tcdaddr
(function).
(setf tcdaddr)
(function).
tcdadr
(function).
(setf tcdadr)
(function).
tcdar
(function).
(setf tcdar)
(function).
tcddaar
(function).
(setf tcddaar)
(function).
tcddadr
(function).
(setf tcddadr)
(function).
tcddar
(function).
(setf tcddar)
(function).
tcdddar
(function).
(setf tcdddar)
(function).
tcdddr
(function).
(setf tcdddr)
(function).
tcddr
(function).
(setf tcddr)
(function).
teighth
(function).
(setf teighth)
(function).
tendp
(function).
tfifth
(function).
(setf tfifth)
(function).
tfourth
(function).
(setf tfourth)
(function).
tlast
(compiler macro).
tlast
(function).
tlist-length
(function).
tninth
(function).
(setf tninth)
(function).
tnth
(function).
(setf tnth)
(function).
tnthcdr
(function).
tsecond
(function).
(setf tsecond)
(function).
tseventh
(function).
(setf tseventh)
(function).
tsixth
(function).
(setf tsixth)
(function).
ttenth
(function).
(setf ttenth)
(function).
tthird
(function).
(setf tthird)
(function).
%copy-tlist-consing
(macro).
%copy-tlist-setf-tvar
(macro).
%tappend-consing
(macro).
%tappend-setf-tvar
(macro).
%tlast0
(function).
%tlast1
(function).
%tlist-get
(macro).
%tlist-set
(macro).
copy-tlist
(function).
list-to-tlist
(function).
tappend
(function).
tappend-lists
(function).
tcadddr
(function).
(setf tcadddr)
(function).
tcddddr
(function).
(setf tcddddr)
(function).
tldiff
(function).
tnreconc
(function).
trevappend
(function).
stmx/util/tcons-alist.lisp
tcons.lisp
(file).
util
(module).
copy-talist
(function).
tacons
(function).
tassoc
(function).
tpairlis
(function).
trassoc
(function).
%coerce-to-fun
(function).
%t-assoc
(macro).
%tassoc
(macro).
%trassoc
(macro).
stmx/util/tcons-set.lisp
tcons.lisp
(file).
util
(module).
stmx/util/tcons-tree.lisp
tcons.lisp
(file).
util
(module).
ttree-equal
(function).
ttree-equal-test
(function).
ttree-equal-test-not
(function).
copy-ttree
(function).
stmx/util/tcons-higher.lisp
tcons-alist.lisp
(file).
util
(module).
stmx/util/tvar.lisp
container.lisp
(file).
util
(module).
stmx/util/tcell.lisp
container.lisp
(file).
util
(module).
+empty-tcell+
(constant).
stmx/util/tstack.lisp
container.lisp
(file).
util
(module).
top-of
(reader method).
(setf top-of)
(writer method).
stmx/util/tfifo.lisp
container.lisp
(file).
tcons.lisp
(file).
util
(module).
empty!
(method).
empty?
(method).
full?
(method).
initialize-instance
(method).
initialize-instance
(method).
peek
(method).
print-object
(method).
put
(method).
take
(method).
tfifo
(function).
tfifo
(class).
try-put
(method).
try-take
(method).
back-of
(reader method).
(setf back-of)
(writer method).
front-of
(reader method).
(setf front-of)
(writer method).
stmx/util/tchannel.lisp
container.lisp
(file).
tcons.lisp
(file).
util
(module).
empty!
(method).
empty?
(method).
empty?
(method).
full?
(method).
full?
(method).
initialize-instance
(method).
initialize-instance
(method).
initialize-instance
(method).
peek
(method).
put
(method).
take
(method).
tchannel
(class).
tport
(class).
try-put
(method).
try-take
(method).
back-of
(reader method).
(setf back-of)
(writer method).
channel-of
(reader method).
front-of
(reader method).
(setf front-of)
(writer method).
tchannel-back-of
(function).
tport-empty?
(function).
stmx/util/bheap.lisp
container.lisp
(file).
util
(module).
empty!
(method).
empty?
(method).
full?
(method).
initialize-instance
(method).
peek
(method).
print-object
(method).
put
(method).
try-put
(method).
try-take
(method).
*empty-vector*
(special variable).
add-bheap
(function).
bheap
(class).
clear-bheap
(function).
compare-bheap-entries
(function).
empty-bheap?
(function).
extend-bheap-vector
(function).
get-bheap
(function).
heapify-bheap
(function).
key-of
(reader method).
length-of
(reader method).
(setf length-of)
(writer method).
pred-of
(reader method).
rem-bheap
(function).
sift-down-bheap
(function).
sift-up-bheap
(function).
vector-of
(reader method).
(setf vector-of)
(writer method).
stmx/util/gmap.lisp
misc.lisp
(file).
print.lisp
(file).
util
(module).
add-to-gmap
(function).
clear-gmap
(function).
copy-gmap
(function).
copy-gmap-into
(function).
do-gmap
(macro).
get-gmap
(function).
(setf get-gmap)
(function).
gmap
(class).
gmap-count
(function).
gmap-empty?
(function).
gmap-keys
(function).
gmap-pairs
(function).
gmap-pred
(function).
gmap-values
(function).
initialize-instance
(method).
map-gmap
(function).
max-gmap
(function).
min-gmap
(function).
print-object
(method).
rem-gmap
(function).
remove-from-gmap
(function).
set-gmap
(function).
count-of
(reader method).
do-gmap*
(macro).
find-key-and-stack
(function).
fwd-traverse-gmap-at
(function).
gmap-count<=
(function).
gmap-count>
(function).
gmap-node
(class).
gmap/copy-node
(generic function).
gmap/new-node
(generic function).
gmap/rebalance-after-insert
(generic function).
gmap/remove-at
(generic function).
is-left-gmap-node-child?
(function).
key-of
(reader method).
(setf key-of)
(writer method).
left-of
(reader method).
(setf left-of)
(writer method).
log.debug-gmap
(macro).
map-gmap-from-end
(function).
pred-function-of
(reader method).
pred-of
(reader method).
print-gmap
(method).
print-gmap-node
(generic function).
print-object-contents
(method).
print-object-contents
(method).
replace-gmap-node
(function).
rev-traverse-gmap-at
(function).
right-of
(reader method).
(setf right-of)
(writer method).
rotate-gmap-node-around
(function).
rotate-gmap-node-left
(function).
rotate-gmap-node-right
(function).
value-of
(reader method).
(setf value-of)
(writer method).
stmx/util/rbmap.lisp
gmap.lisp
(file).
util
(module).
rbmap
(class).
%rbmap-rebalance-after-insert
(function).
%rbmap-remove-at
(function).
%rbmap-remove-black-node-at
(function).
+black+
(constant).
+red+
(constant).
black?
(function).
color-of
(reader method).
(setf color-of)
(writer method).
flip-color
(function).
gmap/copy-node
(method).
gmap/new-node
(method).
gmap/rebalance-after-insert
(method).
gmap/remove-at
(method).
is-left-rbnode-child-red?
(function).
is-left-rbnode-child?
(function).
print-gmap-node
(method).
rbnode
(class).
red?
(function).
stmx/util/tmap.lisp
rbmap.lisp
(file).
util
(module).
initialize-instance
(method).
initialize-instance
(method).
tmap
(class).
gmap/new-node
(method).
tnode
(class).
stmx/util/simple-tvector.lisp
print.lisp
(file).
util
(module).
do-simple-tvector
(macro).
simple-tvector
(function).
simple-tvector
(type).
simple-tvector-length
(function).
(setf tsvref)
(setf expander).
tsvref
(function).
%stmx-impl/notx/set-tsvref
(function).
%stmx-impl/notx/tsvref
(function).
%stmx-impl/swtx/set-tsvref
(function).
%stmx-impl/swtx/tsvref
(function).
set-tsvref
(function).
stmx/util/ghash-table.lisp
print.lisp
(file).
util
(module).
clear-ghash
(function).
do-ghash
(macro).
(setf get-ghash)
(setf expander).
get-ghash
(function).
ghash-keys
(function).
ghash-pairs
(function).
ghash-table
(class).
ghash-table-count
(function).
ghash-table-empty?
(function).
ghash-table-hash
(function).
ghash-table-test
(function).
ghash-values
(function).
initialize-instance
(method).
map-ghash
(function).
print-object
(method).
print-object
(method).
rem-ghash
(function).
set-ghash
(function).
+ghash-default-capacity+
(constant).
+ghash-max-capacity+
(constant).
+ghash-threshold-capacity+
(constant).
copy-ghash
(function).
do-ghash-pairs
(macro).
find-ghash-pair
(function).
ghash-aref-fun
(type).
ghash-hash-fun
(type).
ghash-mask
(function).
ghash-pair
(class).
ghash-set-aref-fun
(type).
ghash-subscript
(function).
ghash-table-count<=
(function).
ghash-table-count>
(function).
ghash-test-fun
(type).
ghash-vector
(type).
ghash/new-pair
(generic function).
ghash/new-vec
(generic function).
rehash-ghash
(function).
set-svref
(function).
stmx/util/thash-table.lisp
ghash-table.lisp
(file).
simple-tvector.lisp
(file).
util
(module).
initialize-instance
(method).
initialize-instance
(method).
initialize-instance
(method).
thash-table
(class).
ghash/new-pair
(method).
ghash/new-vec
(method).
thash-pair
(class).
Packages are listed by definition order.
stmx.lang
bordeaux-threads
.
common-lisp
.
*current-thread*
(special variable).
+hw-transaction-started+
(constant).
+hw-transaction-supported+
(constant).
aif
(macro).
all-features
(function).
assoc-feature
(function).
atomic-compare-and-swap
(macro).
atomic-counter
(structure).
atomic-counter-num
(type).
atomic-counter-slot-type
(type).
atomic-decf
(macro).
atomic-incf
(macro).
atomic-num
(type).
atomic-pop
(macro).
awhen
(macro).
clear-hash
(function).
clos-compute-class-precedence-list
(function).
concat-symbols
(function).
cons^
(function).
copy-hash-table
(function).
default-feature
(function).
default-features
(function).
define-constant-once
(macro).
define-global
(macro).
defprint-object
(macro).
do-fast-vector
(macro).
do-hash
(macro).
do-tree
(macro).
enable-#?-syntax
(macro).
ensure-thread-initial-binding
(function).
ensure-thread-initial-bindings
(function).
eval-always
(macro).
fast-vector
(structure).
fast-vector-capacity
(function).
fast-vector-clear
(function).
fast-vector-length
(function).
fast-vector-pop
(function).
fast-vector-pop-macro
(macro).
fast-vector-push
(function).
fast-vector-push-extend
(function).
free-cons^
(function).
free-list^
(function).
get-atomic-counter
(function).
get-atomic-counter-plus-delta
(function).
get-atomic-place
(macro).
get-atomic-place-plus-delta
(macro).
get-feature
(function).
get-hash
(function).
(setf get-hash)
(function).
hash-table-keys
(function).
hash-table-pairs
(function).
hash-table-values
(function).
hw-transaction-abort
(macro).
hw-transaction-begin
(macro).
hw-transaction-end
(macro).
hw-transaction-rerun-may-succeed?
(macro).
hw-transaction-running?
(macro).
hw-transaction-supported-and-running?
(macro).
hw-transaction-supported?
(macro).
id-of
(generic function).
(setf id-of)
(generic function).
if-bind
(macro).
incf-atomic-counter
(function).
incf-atomic-place
(macro).
let1
(macro).
log.debug
(macro).
log.make-logger
(macro).
log.trace
(macro).
make-atomic-counter
(function).
make-fast-vector
(function).
make-mutex
(function).
mem-read-barrier
(macro).
mem-write-barrier
(macro).
merge-hash-tables
(function).
mutex
(structure).
mutex-is-free?
(function).
mutex-is-own-or-free?
(function).
mutex-is-own?
(function).
mutex-owner
(reader).
(setf mutex-owner)
(writer).
new
(macro).
pop-free-cons^
(macro).
push^
(macro).
release-mutex
(function).
rem-hash
(function).
save-thread-initial-bindings
(macro).
set-atomic-counter
(function).
set-atomic-place
(macro).
set-feature
(function).
set-features
(function).
set-hash
(function).
start-multithreading
(function).
start-thread
(function).
stringify
(function).
try-acquire-mutex
(function).
wait4-thread
(function).
when-bind
(macro).
with-gensym
(macro).
with-gensyms
(macro).
with-lock
(macro).
~
(function).
(setf ~)
(function).
%enable-#?-syntax
(function).
%make-atomic-counter
(function).
%make-fast-vector
(function).
%make-mutex
(function).
*cons-pool*
(special variable).
*feature-list*
(special variable).
*print-ids*
(special variable).
+empty-vector+
(special variable).
+it+
(special variable).
atomic-counter-p
(function).
atomic-counter-version
(reader).
(setf atomic-counter-version)
(writer).
atomic-push
(macro).
atomic-t
(type).
clear-features
(function).
clos-tie-breaker-rule
(function).
collect-all-superclasses
(function).
collect-superclasses
(function).
compile-ensure-1-arg
(function).
compile-ensure-2-args
(function).
compile-if-and
(function).
compile-if-eql
(function).
compile-if-error
(function).
compile-if-eval
(function).
compile-if-not
(function).
compile-if-or
(function).
compile-if-symbol
(function).
compile-if-transformer
(function).
compile-log-warn
(macro).
compute-id-of
(function).
copy-atomic-counter
(function).
copy-fast-vector
(function).
copy-mutex
(function).
detect-thread-support
(function).
fast-vector-initial-element
(reader).
(setf fast-vector-initial-element)
(writer).
fast-vector-len
(reader).
(setf fast-vector-len)
(writer).
fast-vector-make-array
(function).
fast-vector-p
(function).
fast-vector-vec
(reader).
(setf fast-vector-vec)
(writer).
incf-hash-counter
(macro).
intern-feature
(function).
local-precedence-ordering
(function).
lock-owner
(function).
mapappend
(function).
mutex-p
(function).
positive-fixnum
(type).
rem-feature
(function).
some-features
(function).
topological-sort
(function).
visit-tree
(function).
stmx.util
add-to-gmap
(function).
clear-ghash
(function).
clear-gmap
(function).
copy-gmap
(function).
copy-gmap-into
(function).
copy-talist
(function).
do-ghash
(macro).
do-gmap
(macro).
do-simple-tvector
(macro).
empty!
(generic function).
empty?
(generic function).
fixnum/=
(function).
fixnum<
(function).
fixnum=
(function).
fixnum>
(function).
full?
(generic function).
(setf get-ghash)
(setf expander).
get-ghash
(function).
get-gmap
(function).
(setf get-gmap)
(function).
ghash-keys
(function).
ghash-pairs
(function).
ghash-table
(class).
ghash-table-count
(function).
ghash-table-empty?
(function).
ghash-table-hash
(function).
ghash-table-test
(function).
ghash-values
(function).
gmap
(class).
gmap-count
(function).
gmap-empty?
(function).
gmap-keys
(function).
gmap-pairs
(function).
gmap-pred
(function).
gmap-values
(function).
make-tlist
(function).
map-ghash
(function).
map-gmap
(function).
max-gmap
(function).
min-gmap
(function).
peek
(generic function).
put
(generic function).
rbmap
(class).
rem-ghash
(function).
rem-gmap
(function).
remove-from-gmap
(function).
set-ghash
(function).
set-gmap
(function).
simple-tvector
(function).
simple-tvector
(type).
simple-tvector-length
(function).
sxhash-equalp
(function).
tacons
(function).
take
(generic function).
tassoc
(function).
tatom
(function).
tcaaaar
(function).
(setf tcaaaar)
(function).
tcaaadr
(function).
(setf tcaaadr)
(function).
tcaaar
(function).
(setf tcaaar)
(function).
tcaadar
(function).
(setf tcaadar)
(function).
tcaaddr
(function).
(setf tcaaddr)
(function).
tcaadr
(function).
(setf tcaadr)
(function).
tcaar
(function).
(setf tcaar)
(function).
tcadaar
(function).
(setf tcadaar)
(function).
tcadadr
(function).
(setf tcadadr)
(function).
tcadar
(function).
(setf tcadar)
(function).
tcaddar
(function).
(setf tcaddar)
(function).
tcaddr
(function).
(setf tcaddr)
(function).
tcadr
(function).
(setf tcadr)
(function).
(setf tcar)
(setf expander).
tcar
(function).
tcdaaar
(function).
(setf tcdaaar)
(function).
tcdaadr
(function).
(setf tcdaadr)
(function).
tcdaar
(function).
(setf tcdaar)
(function).
tcdadar
(function).
(setf tcdadar)
(function).
tcdaddr
(function).
(setf tcdaddr)
(function).
tcdadr
(function).
(setf tcdadr)
(function).
tcdar
(function).
(setf tcdar)
(function).
tcddaar
(function).
(setf tcddaar)
(function).
tcddadr
(function).
(setf tcddadr)
(function).
tcddar
(function).
(setf tcddar)
(function).
tcdddar
(function).
(setf tcdddar)
(function).
tcdddr
(function).
(setf tcdddr)
(function).
tcddr
(function).
(setf tcddr)
(function).
(setf tcdr)
(setf expander).
tcdr
(function).
tcell
(function).
tcell
(class).
tchannel
(class).
tcons
(function).
tcons
(structure).
tconsp
(function).
teighth
(function).
(setf teighth)
(function).
tendp
(function).
tfifo
(function).
tfifo
(class).
tfifth
(function).
(setf tfifth)
(function).
(setf tfirst)
(setf expander).
tfirst
(function).
tfourth
(function).
(setf tfourth)
(function).
thash-table
(class).
tlast
(compiler macro).
tlast
(function).
tlist
(compiler macro).
tlist
(function).
tlist
(type).
tlist*
(compiler macro).
tlist*
(function).
tlist-length
(function).
tmap
(class).
tninth
(function).
(setf tninth)
(function).
tnth
(function).
(setf tnth)
(function).
tnthcdr
(function).
tpairlis
(function).
tpop
(macro).
tport
(class).
tpush
(macro).
trassoc
(function).
(setf trest)
(setf expander).
trest
(function).
try-put
(generic function).
try-take
(generic function).
tsecond
(function).
(setf tsecond)
(function).
tseventh
(function).
(setf tseventh)
(function).
tsixth
(function).
(setf tsixth)
(function).
tstack
(function).
tstack
(class).
(setf tsvref)
(setf expander).
tsvref
(function).
ttenth
(function).
(setf ttenth)
(function).
tthird
(function).
(setf tthird)
(function).
ttree-equal
(function).
ttree-equal-test
(function).
ttree-equal-test-not
(function).
%coerce-to-fun
(function).
%copy-tlist-consing
(macro).
%copy-tlist-setf-tvar
(macro).
%rbmap-rebalance-after-insert
(function).
%rbmap-remove-at
(function).
%rbmap-remove-black-node-at
(function).
%stmx-impl/notx-set/tcar
(function).
%stmx-impl/notx-set/tcdr
(function).
%stmx-impl/notx-set/tcons-first
(function).
%stmx-impl/notx-set/tcons-rest
(function).
%stmx-impl/notx-set/tfirst
(function).
%stmx-impl/notx-set/trest
(function).
%stmx-impl/notx/set-tsvref
(function).
(setf %stmx-impl/notx/tcar)
(setf expander).
%stmx-impl/notx/tcar
(function).
(setf %stmx-impl/notx/tcdr)
(setf expander).
%stmx-impl/notx/tcdr
(function).
(setf %stmx-impl/notx/tcons-first)
(setf expander).
%stmx-impl/notx/tcons-first
(function).
(setf %stmx-impl/notx/tcons-rest)
(setf expander).
%stmx-impl/notx/tcons-rest
(function).
(setf %stmx-impl/notx/tfirst)
(setf expander).
%stmx-impl/notx/tfirst
(function).
(setf %stmx-impl/notx/trest)
(setf expander).
%stmx-impl/notx/trest
(function).
%stmx-impl/notx/trplaca
(function).
%stmx-impl/notx/trplacd
(function).
%stmx-impl/notx/tsvref
(function).
%stmx-impl/swtx-set/tcar
(function).
%stmx-impl/swtx-set/tcdr
(function).
%stmx-impl/swtx-set/tcons-first
(function).
%stmx-impl/swtx-set/tcons-rest
(function).
%stmx-impl/swtx-set/tfirst
(function).
%stmx-impl/swtx-set/trest
(function).
%stmx-impl/swtx/set-tsvref
(function).
(setf %stmx-impl/swtx/tcar)
(setf expander).
%stmx-impl/swtx/tcar
(function).
(setf %stmx-impl/swtx/tcdr)
(setf expander).
%stmx-impl/swtx/tcdr
(function).
(setf %stmx-impl/swtx/tcons-first)
(setf expander).
%stmx-impl/swtx/tcons-first
(function).
(setf %stmx-impl/swtx/tcons-rest)
(setf expander).
%stmx-impl/swtx/tcons-rest
(function).
(setf %stmx-impl/swtx/tfirst)
(setf expander).
%stmx-impl/swtx/tfirst
(function).
(setf %stmx-impl/swtx/trest)
(setf expander).
%stmx-impl/swtx/trest
(function).
%stmx-impl/swtx/trplaca
(function).
%stmx-impl/swtx/trplacd
(function).
%stmx-impl/swtx/tsvref
(function).
%stmx-impl/tstruct/make-tcons
(function).
%stmx-impl/tstruct/tcons-first
(reader).
(setf %stmx-impl/tstruct/tcons-first)
(writer).
%stmx-impl/tstruct/tcons-rest
(reader).
(setf %stmx-impl/tstruct/tcons-rest)
(writer).
%stmx-impl/tx-set/tcar
(function).
%stmx-impl/tx-set/tcdr
(function).
%stmx-impl/tx-set/tcons-first
(function).
%stmx-impl/tx-set/tcons-rest
(function).
%stmx-impl/tx-set/tfirst
(function).
%stmx-impl/tx-set/trest
(function).
%sxhash-equalp
(macro).
%t-assoc
(macro).
%tappend-consing
(macro).
%tappend-setf-tvar
(macro).
%tassoc
(macro).
%tlast0
(function).
%tlast1
(function).
%tlist-get
(macro).
%tlist-set
(macro).
%trassoc
(macro).
*empty-vector*
(special variable).
+black+
(constant).
+empty-tcell+
(constant).
+ghash-default-capacity+
(constant).
+ghash-max-capacity+
(constant).
+ghash-threshold-capacity+
(constant).
+red+
(constant).
_
(macro).
add-bheap
(function).
back-of
(generic reader).
(setf back-of)
(generic writer).
bheap
(class).
black?
(function).
channel-of
(generic reader).
clear-bheap
(function).
color-of
(generic reader).
(setf color-of)
(generic writer).
comp-result
(type).
compare-bheap-entries
(function).
compare-keys
(function).
copy-ghash
(function).
copy-tcons
(function).
copy-tlist
(function).
copy-ttree
(function).
count-of
(generic reader).
do-ghash-pairs
(macro).
do-gmap*
(macro).
do-tlist
(macro).
empty-bheap?
(function).
extend-bheap-vector
(function).
find-ghash-pair
(function).
find-key-and-stack
(function).
flip-color
(function).
front-of
(generic reader).
(setf front-of)
(generic writer).
fwd-traverse-gmap-at
(function).
get-bheap
(function).
ghash-aref-fun
(type).
ghash-hash-fun
(type).
ghash-mask
(function).
ghash-pair
(class).
ghash-set-aref-fun
(type).
ghash-subscript
(function).
ghash-table-count<=
(function).
ghash-table-count>
(function).
ghash-test-fun
(type).
ghash-vector
(type).
ghash/new-pair
(generic function).
ghash/new-vec
(generic function).
gmap-count<=
(function).
gmap-count>
(function).
gmap-node
(class).
gmap/copy-node
(generic function).
gmap/new-node
(generic function).
gmap/rebalance-after-insert
(generic function).
gmap/remove-at
(generic function).
heapify-bheap
(function).
is-left-gmap-node-child?
(function).
is-left-rbnode-child-red?
(function).
is-left-rbnode-child?
(function).
k<
(constant).
k=
(constant).
k>
(constant).
key-of
(generic reader).
(setf key-of)
(generic writer).
left-of
(generic reader).
(setf left-of)
(generic writer).
length-of
(generic reader).
(setf length-of)
(generic writer).
list-to-tlist
(function).
log.debug-gmap
(macro).
make-tcons
(function).
map-gmap-from-end
(function).
pred-function-of
(generic reader).
pred-of
(generic reader).
print-gmap
(generic function).
print-gmap-node
(generic function).
print-object-contents
(generic function).
rbnode
(class).
red?
(function).
rehash-ghash
(function).
rem-bheap
(function).
replace-gmap-node
(function).
rev-traverse-gmap-at
(function).
right-of
(generic reader).
(setf right-of)
(generic writer).
rotate-gmap-node-around
(function).
rotate-gmap-node-left
(function).
rotate-gmap-node-right
(function).
set-svref
(function).
set-tsvref
(function).
sift-down-bheap
(function).
sift-up-bheap
(function).
tappend
(function).
tappend-lists
(function).
tcadddr
(function).
(setf tcadddr)
(function).
tcddddr
(function).
(setf tcddddr)
(function).
tchannel-back-of
(function).
(setf tcons-first)
(setf expander).
tcons-first
(function).
(setf tcons-rest)
(setf expander).
tcons-rest
(function).
thash-pair
(class).
tldiff
(function).
tlistp
(function).
tnode
(class).
tnreconc
(function).
top-of
(generic reader).
(setf top-of)
(generic writer).
tport-empty?
(function).
trevappend
(function).
trplaca
(function).
trplacd
(function).
ufixnum
(type).
value-of
(generic reader).
(setf value-of)
(generic writer).
vector-of
(generic reader).
(setf vector-of)
(generic writer).
with-ro-slots
(macro).
with-rw-slots
(macro).
stmx
bordeaux-threads
.
closer-mop
.
common-lisp
.
stmx.lang
.
(setf $)
(setf expander).
$
(function).
(setf $-slot)
(setf expander).
$-slot
(function).
*stmx-version*
(special variable).
+unbound-tvar+
(constant).
after-commit
(macro).
analyze-struct
(macro).
atomic
(macro).
before-commit
(macro).
bound-$?
(function).
call-after-commit
(function).
call-before-commit
(function).
fast-atomic
(macro).
hw-atomic2
(macro).
non-transactional-struct
(macro).
nonblocking
(macro).
optimize-for-transaction
(macro).
optimize-for-transaction*
(macro).
orelse
(macro).
retry
(function).
run-atomic
(function).
run-orelse
(function).
transaction
(macro).
transaction?
(function).
transactional
(macro).
transactional
(type).
transactional-class
(macro).
transactional-class
(class).
transactional-object
(class).
transactional-struct
(macro).
tvar
(function).
tvar
(structure).
unbind-$
(function).
(setf $-notx)
(setf expander).
$-notx
(function).
(setf $-swtx)
(setf expander).
$-swtx
(function).
%gv-expand
(macro).
%gv-expand0-f
(function).
%gv-nohw-flag
(macro).
%gvx-expand
(macro).
%gvx-expand0-f
(function).
%hw-atomic2
(macro).
%impl/names-to-symbol
(function).
%make-txfifo
(function).
%make-txhash-table
(function).
%run-sw-atomic
(function).
%stmx-impl/notx-set/$-slot
(function).
(setf %stmx-impl/notx/$-slot)
(setf expander).
%stmx-impl/notx/$-slot
(function).
%stmx-impl/notx/bound-$?
(function).
%stmx-impl/notx/peek-$
(function).
%stmx-impl/notx/try-put-$
(function).
%stmx-impl/notx/try-take-$
(function).
%stmx-impl/notx/unbind-$
(function).
%stmx-impl/swtx-set/$-slot
(function).
(setf %stmx-impl/swtx/$-slot)
(setf expander).
%stmx-impl/swtx/$-slot
(function).
%stmx-impl/swtx/bound-$?
(function).
%stmx-impl/swtx/peek-$
(function).
%stmx-impl/swtx/try-put-$
(function).
%stmx-impl/swtx/try-take-$
(function).
%stmx-impl/swtx/unbind-$
(function).
%stmx-impl/tx-set/$-slot
(function).
%tvar-version-and-value
(function).
%validate-tlog-pool
(function).
*hide-tvars*
(special variable).
*hw-tlog-write-version*
(special variable).
*lv*
(special variable).
*optimized-funs*
(special variable).
*record-to-tlogs*
(special variable).
*recursive-call-compute-effective-slot-definition*
(special variable).
*recursive-call-list-classes-containing-direct-slots*
(special variable).
*tlog*
(special variable).
*tlog-pool*
(special variable).
*tvar-id*
(special variable).
+dummy-tvar+
(special variable).
+global-clock-delta+
(constant).
+global-clock-nohw-delta+
(constant).
+gv+
(constant).
+gv-max-stat+
(constant).
+hw-atomic-max-attempts+
(constant).
+invalid-version+
(constant).
+txhash-default-capacity+
(constant).
+txhash-threshold-capacity+
(constant).
add-optimized-fun
(function).
add-optimized-fun*
(function).
add-txpair-to-pool
(function).
adjust-transactional-slot-form
(function).
adjust-transactional-slot-forms
(function).
bind-optimized-fun
(function).
cerror-tclass-slot-change
(function).
check-tclass-slot-change
(function).
check-tclass-slot-name
(function).
clear-tlog
(function).
clear-txfifo
(function).
clear-txhash
(function).
commit
(function).
commit-nested
(function).
commit-sw-update-tvars
(function).
compile-cerror
(macro).
compile-error
(macro).
compiling-transaction
(type).
copy-gv156
(function).
copy-lv156
(function).
copy-orelse-tx
(function).
copy-slot-form
(function).
copy-tlog
(function).
copy-tstruct-def
(function).
copy-tstruct-slot
(function).
copy-tvar
(function).
copy-txfifo
(function).
copy-txhash-table
(function).
copy-txhash-table-into
(function).
copy-txpair
(function).
current-tlog
(macro).
define-method-initialize-instance
(macro).
define-tstruct-slot-accessor
(macro).
do-class-transactional-direct-slots
(macro).
do-class-transactional-effective-slots
(macro).
do-filter-txfifo
(macro).
do-filter-txfifo-entries
(macro).
do-loop-tstruct-defs
(macro).
do-tstruct-defs
(macro).
do-txfifo
(macro).
do-txfifo-entries
(macro).
do-txhash
(macro).
do-txhash-entries
(macro).
ensure-tlog-after-commit
(function).
ensure-tlog-before-commit
(function).
ensure-transactional-object-among-superclasses
(function).
error-tclass-slot-name
(function).
extract-declares
(function).
extract-docstrings
(function).
fast-sw-atomic
(macro).
find-class-or-nil
(function).
find-first-rerun-tx
(function).
find-slot-by-name
(function).
find-slot-form-by-name
(function).
find-txhash
(function).
free-tlog
(function).
free-tx-logs
(function).
get-next-id
(function).
get-txhash
(function).
global-clock/decf-nohw-counter
(macro).
global-clock/features
(macro).
global-clock/get-nohw-counter
(macro).
global-clock/hw/after-abort
(macro).
global-clock/hw/start-read
(macro).
global-clock/hw/start-write
(macro).
global-clock/hw/stat-aborted
(macro).
global-clock/hw/stat-committed
(macro).
global-clock/hw/write
(macro).
global-clock/incf-nohw-counter
(macro).
global-clock/publish-features
(function).
global-clock/sw/after-abort
(macro).
global-clock/sw/start-read
(macro).
global-clock/sw/start-write
(macro).
global-clock/sw/stat-aborted
(macro).
global-clock/sw/stat-committed
(macro).
global-clock/sw/write
(macro).
global-clock/valid-read?
(macro).
global-clock/version-type
(type).
gv1/after-abort
(macro).
gv1/decf-nohw-counter
(macro).
gv1/features
(macro).
gv1/get-nohw-counter
(macro).
gv1/hw/after-abort
(macro).
gv1/hw/start-read
(macro).
gv1/hw/start-write
(macro).
gv1/hw/stat-aborted
(macro).
gv1/hw/stat-committed
(macro).
gv1/hw/write
(macro).
gv1/incf-nohw-counter
(macro).
gv1/start-read
(macro).
gv1/start-write
(macro).
gv1/stat-aborted
(macro).
gv1/stat-committed
(macro).
gv1/sw/after-abort
(macro).
gv1/sw/start-read
(macro).
gv1/sw/start-write
(macro).
gv1/sw/stat-aborted
(macro).
gv1/sw/stat-committed
(macro).
gv1/sw/write
(macro).
gv1/valid-read?
(macro).
gv1/version-type
(type).
gv1/write
(macro).
gv156
(structure).
gv156-aborts
(reader).
(setf gv156-aborts)
(writer).
gv156-commits
(reader).
(setf gv156-commits)
(writer).
gv156-nohw-counter
(reader).
(setf gv156-nohw-counter)
(writer).
gv156-nohw-flag
(reader).
(setf gv156-nohw-flag)
(writer).
gv156-p
(function).
gv156-pad1
(reader).
(setf gv156-pad1)
(writer).
gv156-pad2
(reader).
(setf gv156-pad2)
(writer).
gv156-pad3
(reader).
(setf gv156-pad3)
(writer).
gv156-pad4
(reader).
(setf gv156-pad4)
(writer).
gv156-pad5
(reader).
(setf gv156-pad5)
(writer).
gv156-pad6
(reader).
(setf gv156-pad6)
(writer).
gv156-pad7
(reader).
(setf gv156-pad7)
(writer).
gv156-version
(function).
(setf gv156-version)
(function).
gv156/version-type
(type).
gv5/after-abort
(macro).
gv5/decf-nohw-counter
(macro).
gv5/features
(macro).
gv5/get-nohw-counter
(macro).
gv5/hw/after-abort
(macro).
gv5/hw/start-read
(macro).
gv5/hw/start-write
(macro).
gv5/hw/stat-aborted
(macro).
gv5/hw/stat-committed
(macro).
gv5/hw/write
(macro).
gv5/incf-nohw-counter
(macro).
gv5/start-read
(macro).
gv5/start-write
(macro).
gv5/stat-aborted
(macro).
gv5/stat-committed
(macro).
gv5/sw/after-abort
(macro).
gv5/sw/start-read
(macro).
gv5/sw/start-write
(macro).
gv5/sw/stat-aborted
(macro).
gv5/sw/stat-committed
(macro).
gv5/sw/write
(macro).
gv5/valid-read?
(macro).
gv5/version-type
(type).
gv5/write
(macro).
gv6/%is-gv5-mode?
(macro).
gv6/%set-gv1-mode
(function).
gv6/%set-gv5-mode
(function).
gv6/%update-gv-stat
(function).
gv6/%update-lv-stat
(macro).
gv6/decf-nohw-counter
(macro).
gv6/features
(macro).
gv6/get-nohw-counter
(macro).
gv6/hw/after-abort
(macro).
gv6/hw/start-read
(macro).
gv6/hw/start-write
(macro).
gv6/hw/stat-aborted
(macro).
gv6/hw/stat-committed
(macro).
gv6/hw/write
(macro).
gv6/incf-nohw-counter
(macro).
gv6/stat-aborted
(macro).
gv6/stat-committed
(macro).
gv6/sw/after-abort
(macro).
gv6/sw/start-read
(macro).
gv6/sw/start-write
(macro).
gv6/sw/stat-aborted
(macro).
gv6/sw/stat-committed
(macro).
gv6/sw/write
(macro).
gv6/valid-read?
(macro).
gv6/version-type
(type).
gvx-add-missing
(macro).
hide-tvars?
(function).
hw-tlog-write-version
(macro).
hw-transaction-test
(function).
hw-transaction?
(function).
invalid?
(function).
invoke-after-commit
(function).
invoke-before-commit
(function).
lambda-list-param-to-arg
(function).
lambda-list-param-to-arg-set-p
(function).
lambda-list-quote-default-forms
(function).
lambda-list-to-args
(function).
list-class-transactional-direct-slots
(function).
list-classes-containing-direct-slots
(function).
list-direct-slot-in-superclasses
(function).
listen-tvar
(function).
listen-tvars-of
(function).
loop-funcall-on-appendable-vector
(function).
lv156
(structure).
lv156-aborts
(reader).
(setf lv156-aborts)
(writer).
lv156-commits
(reader).
(setf lv156-commits)
(writer).
lv156-p
(function).
make-gv156
(function).
make-load-form/tstruct-def
(function).
make-load-form/tstruct-slot
(function).
make-lv156
(function).
make-orelse-tx
(function).
make-tlog
(function).
make-tlog-pool
(function).
make-tstruct-def
(function).
make-tstruct-slot
(function).
make-tvar
(function).
make-txfifo
(function).
make-txhash-table
(function).
maybe-yield-before-rerun
(macro).
merge-tlog-reads
(function).
merge-tlog-reads-tx
(function).
merge-txhash-tables
(function).
names-to-symbol
(function).
new-or-clear-tlog
(function).
new-tlog
(function).
new-txpair-from-pool
(function).
notify-tlog
(function).
notify-tvar
(function).
notify-tvar-high-load
(function).
options-for-defun
(macro).
orelse-error
(condition).
orelse-tx
(structure).
orelse-tx-func
(reader).
(setf orelse-tx-func)
(writer).
orelse-tx-log
(reader).
(setf orelse-tx-log)
(writer).
orelse-tx-p
(function).
orelse-tx-retry
(reader).
(setf orelse-tx-retry)
(writer).
param-quote-default-form
(function).
parse-struct-def
(function).
parse-struct-def-and-slots
(function).
parse-struct-slot
(function).
parse-struct-slots
(function).
peek-$
(function).
put-txfifo
(function).
raw-value-of
(function).
(setf raw-value-of)
(function).
recording?
(function).
rehash-txhash
(function).
rerun
(function).
rerun-error
(condition).
retry-error
(condition).
run-nonblocking
(function).
run-once
(function).
run-sw-atomic
(function).
set-$
(function).
set-$-notx
(function).
set-$-swtx
(function).
set-assoc
(function).
set-assoc*
(function).
set-tvar-value-and-version
(function).
set-txhash
(function).
shallow-invalid?
(function).
shallow-valid?
(function).
slot-form-name
(function).
slot-form-transactional?
(function).
slot-raw-tvar
(macro).
stmx-internal-error
(function).
stmx-internal-error/bug
(function).
stmx-internal-error/suggest-bordeaux-threads
(function).
stmx.compile-error
(condition).
stmx.control-error
(condition).
sw-atomic
(macro).
sw-transaction?
(function).
symbol-package-or-fail
(function).
tlog
(structure).
tlog-after-commit
(reader).
(setf tlog-after-commit)
(writer).
tlog-before-commit
(reader).
(setf tlog-before-commit)
(writer).
tlog-func-vector
(type).
tlog-lock
(reader).
(setf tlog-lock)
(writer).
tlog-locked
(reader).
tlog-p
(function).
tlog-parent
(reader).
(setf tlog-parent)
(writer).
tlog-prevent-sleep
(reader).
(setf tlog-prevent-sleep)
(writer).
tlog-read-version
(reader).
(setf tlog-read-version)
(writer).
tlog-reads
(reader).
(setf tlog-reads)
(writer).
tlog-semaphore
(reader).
(setf tlog-semaphore)
(writer).
tlog-writes
(reader).
(setf tlog-writes)
(writer).
transactional-direct-slot
(class).
transactional-effective-slot
(class).
transactional-slot?
(generic function).
(setf transactional-slot?)
(generic writer).
try-lock-tvar
(function).
try-lock-tvars
(function).
try-put-$
(function).
try-take-$
(function).
tstruct-def
(generic function).
tstruct-def
(structure).
tstruct-def->all
(function).
tstruct-def->defmethod-tstruct-def
(function).
tstruct-def->defun-accessor
(function).
tstruct-def->defun-accessors
(function).
tstruct-def->defun-constructor
(function).
tstruct-def->defun-copier
(function).
tstruct-def->defun-functions
(function).
tstruct-def->form
(function).
tstruct-def->tx-accessors
(function).
tstruct-def->tx-functions
(function).
tstruct-def-all-slots
(function).
tstruct-def-conc-name
(reader).
(setf tstruct-def-conc-name)
(writer).
tstruct-def-constructor
(reader).
(setf tstruct-def-constructor)
(writer).
tstruct-def-copier
(reader).
(setf tstruct-def-copier)
(writer).
tstruct-def-name
(reader).
(setf tstruct-def-name)
(writer).
tstruct-def-options
(reader).
(setf tstruct-def-options)
(writer).
tstruct-def-p
(function).
tstruct-def-package
(function).
tstruct-def-slots
(reader).
(setf tstruct-def-slots)
(writer).
tstruct-def-superclass
(reader).
(setf tstruct-def-superclass)
(writer).
tstruct-def-tx-conc-name
(function).
tstruct-def-tx-constructor
(function).
tstruct-def-type
(reader).
(setf tstruct-def-type)
(writer).
tstruct-slot
(structure).
tstruct-slot->form
(function).
tstruct-slot-default-accessor
(function).
tstruct-slot-effective-reader
(function).
tstruct-slot-effective-writer
(function).
tstruct-slot-initform
(reader).
(setf tstruct-slot-initform)
(writer).
tstruct-slot-initialize
(function).
tstruct-slot-keyword
(function).
tstruct-slot-name
(reader).
(setf tstruct-slot-name)
(writer).
tstruct-slot-options
(reader).
(setf tstruct-slot-options)
(writer).
tstruct-slot-p
(function).
tstruct-slot-read-only
(reader).
(setf tstruct-slot-read-only)
(writer).
tstruct-slot-reader
(reader).
(setf tstruct-slot-reader)
(writer).
tstruct-slot-transactional
(reader).
(setf tstruct-slot-transactional)
(writer).
tstruct-slot-tx-accessor
(function).
tstruct-slot-type
(reader).
(setf tstruct-slot-type)
(writer).
tstruct-slot-writer
(reader).
(setf tstruct-slot-writer)
(writer).
tvar-id
(reader).
tvar-id/next
(macro).
tvar-p
(function).
tvar-unwrap-slot
(function).
tvar-unwrap-slot-macro
(macro).
tvar-valid-and-own-or-unlocked?
(function).
tvar-valid-and-unlocked?
(function).
tvar-value
(reader).
(setf tvar-value)
(writer).
tvar-value-and-version-or-fail
(function).
tvar-version
(reader).
(setf tvar-version)
(writer).
tvar-waiting-for
(reader).
(setf tvar-waiting-for)
(writer).
tvar-waiting-lock
(reader).
tvar-wrap-slot
(function).
tvar-wrap-slot-macro
(macro).
tvar>
(function).
tx-read-of
(function).
tx-write-of
(function).
txfifo
(structure).
txfifo-back
(reader).
(setf txfifo-back)
(writer).
txfifo-front
(reader).
(setf txfifo-front)
(writer).
txfifo-p
(function).
txhash-mask
(function).
txhash-subscript
(function).
txhash-table
(structure).
txhash-table-count
(reader).
(setf txhash-table-count)
(writer).
txhash-table-p
(function).
txhash-table-pool
(reader).
(setf txhash-table-pool)
(writer).
txhash-table-vec
(reader).
(setf txhash-table-vec)
(writer).
txpair
(function).
txpair
(structure).
txpair-key
(reader).
(setf txpair-key)
(writer).
txpair-next
(reader).
(setf txpair-next)
(writer).
txpair-p
(function).
txpair-rest
(reader).
(setf txpair-rest)
(writer).
txpair-value
(reader).
(setf txpair-value)
(writer).
typespec-allows?
(function).
unbound-slot-error
(function).
unbound-tvar-error
(function).
undefine-method
(function).
undefine-method-before
(function).
unlisten-tvar
(function).
unlisten-tvars-of
(function).
unlock-tvar
(function).
unlock-tvars
(function).
use-$-hwtx?
(macro).
use-$-swtx?
(macro).
valid-and-own-or-unlocked?
(function).
valid-and-unlocked?
(function).
valid?
(function).
validate-current-thread
(function).
validate-tlog-pool
(macro).
value-of
(generic function).
(setf value-of)
(generic function).
version-type
(type).
wait-once
(function).
wait-tlog
(function).
with-declares
(macro).
with-docstrings
(macro).
with-docstrings-declares
(macro).
with-hwtx
(macro).
with-notx
(macro).
with-recording
(macro).
with-recording-to-tlog
(macro).
with-swtx
(macro).
with-tlog
(macro).
with-tx
(macro).
without-recording-with-show-tvars
(macro).
stmx.asm
common-lisp
.
+impl-package+
(constant).
+transaction-started+
(constant).
+transaction-user-abort+
(constant).
compile-if
(function).
compile-if-package
(function).
compile-if-symbol
(function).
cpuid
(function).
find-symbol*
(function).
lock-elision-supported-p
(function).
symbol-name*
(function).
transaction-abort
(function).
transaction-begin
(function).
transaction-end
(function).
transaction-rerun-may-succeed-p
(function).
transaction-running-p
(function).
transaction-supported-p
(function).
%transaction-begin
(function).
%transaction-end
(function).
%transaction-running-p
(function).
+defknown-has-overwrite-fndb-silently+
(constant).
compile-if-sbcl-disassem<=32-bit
(function).
compile-if-sbcl-lacks-rtm-instructions
(function).
defknown
(macro).
int-list>=
(function).
lisp-version>=
(function).
split-string
(function).
string-to-int-list
(function).
transaction-abort-macro
(macro).
Definitions are sorted by export status, category, package, and then by lexicographic order.
Designator for the SBCL internal package where we look for VOP-related symbols
Value returned by (transaction-begin) if the transaction is successfully started. It is an implementation-dependent fixnum, different from all possible transactions abort error codes.
Value returned by (transaction-begin) if the transaction was manually aborted
by calling (transaction-abort).
It is an implementation-dependent fixnum, different from +transaction-started+
and from all error codes indicating a spontaneous abort.
Unbound TVARs actually contain this value. Use with care.
stmx
.
Register BODY to be invoked after the current transaction commits.
If BODY signals an error when executed, the error is propagated
to the caller and further code registered with AFTER-COMMIT is not executed,
but the transaction remains committed.
WARNING: Code registered with after-commit has a number or restrictions:
1) if BODY signal an error when executed, the error is propagated to the caller,
forms registered later with AFTER-COMMIT are not executed,
but the transaction remains committed.
2) BODY is *not* executed inside a transaction: while it is certainly possible to explicitly run an (atomic) block from it, doing so would probably defeat the purpose of AFTER-COMMIT and it may also cause a significant performance penalty.
stmx
.
Analyze the slots of a non-transactional struct, so that transactional structs can subclass it.
Use this macro to wrap a DEFSTRUCT as follows:
(ANALYZE-STRUCT (DEFSTRUCT {struct-name | (struct-name [options])} slots-description*)
Note: this macro only analyzes the structure definition, does *not* define the structure. See NON-TRANSACTIONAL-STRUCT for that.
stmx
.
Main entry point for STMX.
Run BODY in a memory transaction. All changes to transactional memory
will be visible to other threads only after BODY returns normally (commits).
If BODY signals an error, its effects on transactional memory are rolled back
and the error is propagated normally.
Also, no work-in-progress transactional memory will ever be visible to other
threads.
A memory transaction can also retry: in such case ATOMIC will abort it,
wait until some of the value read by the transaction have changed,
then re-run the transaction from the beginning.
Since STMX transactions do not lock memory, it is possible for different
transactions to try to update the same memory (almost) simultaneously.
In such case, the conflict is detected when they try to commit or rollback,
and only one conflicting transaction is allowed to commit:
all others are immediately re-run again from the beginning.
For this reason, a transaction SHOULD NOT perform any irreversible
operation such as INPUT/OUTPUT: the result would be that I/O is executed
multiple times, or executed even when it shouldn’t have!
Irreversible operations SHOULD be performed OUTSIDE transactions,
for example by queueing them into transactional memory that another thread
will consume and then, OUTSIDE transactions, actually perform them.
For how to create transactional memory, see TRANSACTIONAL or TVAR.
For another way to run transactions, see also TRANSACTION.
For advanced features inside transactions, see RETRY, ORELSE, NONBLOCKING,
BEFORE-COMMIT and AFTER-COMMIT.
For pre-defined transactional classes, see the package STMX.UTIL
stmx
.
Atomically decrement PLACE by DELTA. Return _previous_ value of PLACE.
Atomically increment PLACE by DELTA. Return _previous_ value of PLACE.
Like POP, but atomic. PLACE may be read multiple times before the operation completes – the write does not occur until such time that no other thread modified PLACE between the read and the write.
Works only on places supported by ATOMIC-COMPARE-AND-SWAP.
Register BODY to be invoked immediately before the current transaction commits.
If BODY signals an error when executed, the error is propagated to the caller,
further code registered with BEFORE-COMMIT are not executed,
and the transaction rollbacks.
BODY can read and write normally to transactional memory, and in case of conflicts
the whole transaction (not only the code registered with before-commit)
is re-executed from the beginning.
WARNING: BODY cannot (retry) - attempts to do so will signal an error.
Starting a nested transaction and retrying inside that is acceptable,
as long as the (retry) does not propagate outside BODY.
stmx
.
Same as DEFCONSTANT, but evaluate VALUE only once:
re-executing again the same (DEFINE-CONSTANT-ONCE name ...) has no effects.
Define NAME as a global variable, declaring that it will have the same value
in all threads, i.e. it will not be special nor dynamically bound.
This is implemented either with a compiler-specific macro (for example SB-EXT:DEFGLOBAL on SBCL), or as DEFVAR if no better implementation is available.
Execute BODY on each KEY/VALUE contained in HASH. Return NIL.
Execute BODY in order on each key/value pair contained in M:
first execute it on the smallest key, then the second smallest...
finally execute BODY on the largest key. Return nil.
If :FROM-END is true, BODY will be executed first on the largest key,
then on the second largest key... and finally on the smallest key.
Adding or removing keys from M during this call (even from other threads) has undefined consequences. Not even the current key can be removed.
Execute body on each key/value pair contained in hash table
Execute BODY on each ELEMENT contained in simple-tvector TVEC.
Creates an implicit block named NIL, so (return ...) can be used to exit early from the loop with an explicit return value.
Execute BODY for each atom inside TREE
Possibly slightly faster variant of ATOMIC.
On systems supporting hardware transactions (as of July 2013, very few systems
support them), FAST-ATOMIC and ATOMIC are identical.
On other systems, multiple nested FAST-ATOMIC forms may be slightly faster than
multiple nested ATOMIC blocks, at the price of compiling BODY more than once.
stmx
.
If FAST-VECTOR is not empty, remove its last element and return it and t as multiple values. Otherwise evaluate DEFAULT and return (values DEFAULT NIL).
Return current value of atomic PLACE.
Return DELTA plus current value of atomic PLACE.
Run BODY in a hardware memory transaction. All changes to transactional memory
will be visible to other threads only after BODY returns normally (commits).
If BODY signals an error, its effects on transactional memory are rolled back
and the error is propagated normally.
Also, no work-in-progress transactional memory will ever be visible to other
threads.
If hardware memory transaction aborts for a conflict, rerun it.
If it fails for some other reason, execute FALLBACK.
stmx
.
Abort a hardware memory transaction currently in progress. Causes a rollback of *all* transaction effects, execution resumes at (hw-transaction-begin) by returning abort reason.
Start a hardware memory transaction. Return +hw-transaction-started+ if transaction started successfully, otherwise return abort reason.
Try to commit a hardware memory transaction currently in progress. If commit is successful, return normally. Otherwise execution resumes at (hw-transaction-begin) by returning abort reason.
If ERR-CODE is the result returned by (HW-TRANSACTION-BEGIN) of an *aborted* transaction,
return T if re-running the same transaction has a possibility to succeed,
i.e. if the abort reason was temporary (as for example a conflict with another thread).
Return NIL if re-running the same transaction has no possibility to succeed.
Return T if a hardware memory transaction is in progress.
Return T if the CPU supports hardware memory transactions, and there is a compiler extension to use them, otherwise return NIL.
Increase atomic PLACE by DELTA and return its new value.
Memory read barrier. Execute BEFORE, then put the barrier.
Memory write barrier. Execute BEFORE, then put the barrier.
Use this macro to wrap a normal DEFSTRUCT as follows:
(NON-TRANSACTIONAL-STRUCT (DEFSTRUCT {struct-name | (struct-name [options])} slots-description*)
The effect is the same as DEFSTRUCT, plus its slots will be analyzed
so that transactional structs can subclass it
stmx
.
Execute all the forms in BODY in a single nested transaction and:
a) in case of transaction conflicts, re-execute BODY
b) if BODY returns normally, commit and return multiple values:
T followed by the values returned by BODY.
b) if BODY signals an error, rollback and raise such error.
d) if BODY attempts to retry, immediately return NIL without waiting/sleeping.
Can only be used inside an ATOMIC block.
stmx
.
stmx
.
stmx
.
Execute each form in BODY from left to right in separate, nested transactions
until one succeeds (i.e. commits) or signals an error.
If a form calls (RETRY) or has a temporary failure (temporary failures as
for example conflicts are normally invisible because (ATOMIC ...) re-executes
them automatically) advance to the next form and run it instead of retrying
the current one.
Returns the value of the transaction that succeeded,
or signals the error raised by the transaction that failed.
Can only be used inside an ATOMIC block.
stmx
.
Equivalent to POP, but also assumes the CONS at PLACE is no longer
used and can be added to free CONS pool.
Removes and returns the first element in PLACE.
Equivalent to PUSH, but uses CONS pool to speedup allocation.
Inserts VALUE as the first element in PLACE.
Return the modified PLACE.
Set and return value of atomic PLACE.
Equivalent to POP, but for TCONS transactional cells. Removes and returns the first element in PLACE.
Equivalent to PUSH, but for TCONS transactional cells. Inserts VALUE as the first element in PLACE. Return the modified PLACE.
Deprecated. Use ATOMIC instead.
Define FUNC-NAME as a new atomic function or method.
Use this macro to wrap a normal DEFUN or DEFMETHOD as follows:
(TRANSACTION (DEFUN function-name (arguments) body))
or
(TRANSACTION (DEFMETHOD function-name (arguments) body))
The effect is the same as DEFUN - or DEFMETHOD - plus:
- the BODY is wrapped inside (atomic ...)
stmx
.
Define CLASS-OR-STRUCT-NAME as a new transactional class or struct.
Use this macro to wrap a normal DEFCLASS as follows: (TRANSACTIONAL (DEFCLASS class-name (superclasses) (slots) [options]))
Or to wrap a normal DEFCLASS as follows:
(TRANSACTIONAL (DEFSTRUCT (class-name (options)) slots))
stmx
.
Define CLASS-NAME as a new transactional class.
Use this macro to wrap a normal DEFCLASS as follows:
(TRANSACTIONAL (DEFCLASS class-name (superclasses) (slots) [options]))
The effect is the same as DEFCLASS, plus:
- by default, slots are transactional memory (implemented by TVARs)
- it inherits also from TRANSACTIONAL-OBJECT
- the metaclass is TRANSACTIONAL-CLASS
- it internally defines a method INITIALIZE-INSTANCE :before, do NOT redefine it
stmx
.
Define NAME as a new transactional struct.
Use this macro to wrap a normal DEFSTRUCT as follows:
(TRANSACTIONAL-STRUCT (DEFSTRUCT {struct-name | (struct-name [options])} slots-description*)
The effect is the same as DEFSTRUCT, plus:
- by default, direct slots are transactional memory (implemented by TVARs)
stmx
.
Faster replacement for BORDEAUX-THREADS:WITH-LOCK-HELD.
Set VALUE as the first element in a TCONS or non-null TLIST. This function should always be executed inside an STMX atomic block.
tcar
(function).
Set VALUE as the rest element in a TCONS or non-null TLIST.
This function should always be executed inside an STMX atomic block.
tcdr
(function).
Set VALUE as the first element in a TCONS or non-null TLIST.
This function should always be executed inside an STMX atomic block.
tfirst
(function).
Set VALUE as the rest element in a TCONS or non-null TLIST.
This function should always be executed inside an STMX atomic block.
trest
(function).
tsvref
(function).
set-tsvref
(function).
Get the value from the transactional variable VAR and return it.
Return +unbound-tvar+ if VAR is not bound to a value.
Works both inside and outside transactions.
During transactions, it uses transaction log to record the read
and to check for any value stored in the log.
Get the value from the transactional variable VAR and return it.
Signal an error if VAR is not bound to a value.
Works both inside and outside transactions.
During transactions, it uses transaction log to record the read
and to check for any value stored in the log.
stmx
.
N-ary version of SET-GMAP and (SETF (GET-GMAP ...) ...):
Given a list of alternating keys and values,
add or replace each of them into M. Return M.
Return T if all features from LIST are present in *FEATURE-LIST* and have non-NIL value.
Return (list F VALUE) if F is present in *FEATURE-LIST*
Return true if transactional variable VAR is bound to a value.
Works both outside and inside transactions.
During transactions, it uses transaction log to record the read and to check for any value stored in the log.
stmx
.
Register FUNC function to be invoked after the current transaction commits.
IMPORTANT: See AFTER-COMMIT for what FUNC must not do.
stmx
.
Register FUNC function to be invoked immediately before the current transaction commits.
IMPORTANT: See BEFORE-COMMIT for what FUNC must not do.
stmx
.
Remove all keys and values from HASH. Return HASH.
Remove all keys and values from M. Return M.
Same as (clrhash hash).
Print the things to a string, the convert the string into a symbol interned in current package. Return the symbol
Get a CONS from free cons pool, otherwise allocate it. Return the CONS.
Create and return a copy of binary tree M. Keys and values in M are shallow copied.
Fill MCOPY with a copy of gmap M and return MCOPY.
Copies all keys and values from M into MCOPY
and removes any other key/value already present in MCOPY.
Copy all key/value pairs from hash-table SRC into hash-table DST. Other keys (and their values) present in DST but not in SRC are not modified. Return DST.
Return a new association list which is EQUAL to TALIST.
Add feature F and its VALUE into *FEATURE-LIST*, unless F is already present. Return (values T VALUE) if F was actually inserted in *FEATURE-LIST*, otherwise return NIL and the value already present in *FEATURE-LIST*.
Set the value of each feature in ALIST, unless the feature is already
present in *FEATURE-LIST*. Each element in ALIST must be either
a pair (FEATURE VALUE) or a simple atom FEATURE.
In the latter case, the FEATURE value will default to T.
Return current capacity of FAST-VECTOR.
Remove all elements from FAST-VECTOR. Return FAST-VECTOR.
Return current length of FAST-VECTOR.
If FAST-VECTOR is not empty, remove its last element and return it and t as multiple values. Otherwise return (values DEFAULT NIL).
If FAST-VECTOR is not full, append NEW-ELEMENT to FAST-VECTOR and return
the index of the pushed element.
Otherwise return NIL.
If FAST-VECTOR is full, resize it. Then append NEW-ELEMENT to FAST-VECTOR and return the index of the pushed element.
Find and return the symbol named SYMBOL-NAME in PACKAGE
Optimized version of (/= x y) for FIXNUM arguments
Optimized version of (< x y) for FIXNUM arguments
Optimized version of (= x y) for FIXNUM arguments
Optimized version of (> x y) for FIXNUM arguments
Add a CONS cell to free cons pool.
Add a list of CONS cells to free cons pool.
Return current value of atomic COUNTER.
Return DELTA plus current value of atomic COUNTER.
Return value of F in *FEATURE-LIST* and T, or (values DEFAULT NIL) if not present or has NIL value.
If KEY is associated to VALUE in HASH, return (values VALUE t) Otherwise return (values DEFAULT nil).
Find KEY in binary tree M and return its value and T as multiple values. If M does not contain KEY, return (values DEFAULT NIL).
Add KEY to binary tree M if not present, and associate VALUE to KEY in M. Return VALUE.
Same as (gethash key hash), only with reversed arguments.
Same as (setf (gethash key hash) value), only with reversed key and hash arguments.
Return a list containing the keys in ghash-table SRC.
If TO-LIST is not nil, it will be appended to the returned list.
TO-LIST contents is not destructively modified.
Return an alist containing a (key . value) pair for each entry
in ghash-table SRC.
If TO-ALIST is not nil, it will be appended to the returned alist.
TO-ALIST contents is not destructively modified.
Return the number of KEY/VALUE entries in ghash-table HASH.
Return T if GHASH-TABLE is empty, i.e. if it contains no entries.
Return the symbol used by ghash-table HASH to hash keys.
Return the symbol used by ghash-table HASH to compare keys.
Return a list containing the values in ghash-table SRC.
If TO-LIST is not nil, it will be appended to the returned list.
TO-LIST contents is not destructively modified.
Return number of elements in binary tree M.
Return t if binary tree M is empty, otherwise return nil.
Return an ordered list of all keys contained in M.
Return an ordered list of pairs (key . value) containing all entries in M.
Return the predicate symbol used by binary tree M to sort keys.
Return a list of all values contained in M.
The values are returned in the order given by their keys:
first the value associated to the smallest key, and so on.
Return a list containing the keys in hash-table SRC.
If TO-LIST is not nil, it will be appended to the returned list.
TO-LIST contents is not destructively modified.
Return an alist containing a (key . value) pair for each entry
in hash-table SRC.
If TO-ALIST is not nil, it will be appended to the returned alist.
TO-ALIST contents is not destructively modified.
Return a list containing the values in hash-table SRC.
If TO-LIST is not nil, it will be appended to the returned list.
TO-LIST contents is not destructively modified.
Increase atomic COUNTER by DELTA and return its new value.
Test for HLE, i.e. hardware lock elision.
HLE is supported if (cpuid 7) returns ebx with bit 4 set.
If a processor does not support HLE, it will ignore the
assembler instruction prefixes XACQUIRE and XRELEASE.
Create and return a new ATOMIC-COUNTER.
Create and return an initially empty FAST-VECTOR with specified maximum length.
Note: initial-element MUST be compatible with type element-type,
i.e. (typep initial-element element-type) must return true.
Create and return a MUTEX.
Constructs a tlist with SIZE elements each set to INITIAL-ELEMENT
Invoke FUNC on each key/value pair contained in HASH. Return NIL.
FUNC must be a function accepting two arguments: key and value.
Adding or removing keys from HASH during this call (even from other threads) has undefined consequences. Not even the current key can be removed.
Invoke FUNC in order on each key/value pair contained in M:
first invoke it on the smallest key, then the second smallest...
finally invoke FUNC on the largest key. Return nil.
FUNC must be a function accepting two arguments: key and value.
Adding or removing keys from M during this call (even from other threads) has undefined consequences. Not even the current key can be removed.
Return the largest key in M, its value, and t as multiple values, or (values nil nil nil) if M is empty
Copy hash-table SRC into hash-table DST.
Return t if SRC and DST are compatible,
i.e. if they contain eq values for the keys common to both,
otherwise return nil.
(in the latter case, the merge will not be completed).
Return the smallest key in M, its value, and t as multiple values, or (values nil nil nil) if M is empty.
Return T if MUTEX is free. Return NIL if MUTEX
is currently locked by current thread or some other thread.
Return T if MUTEX is free or locked by current thread. Return NIL if MUTEX is currently locked by some other thread.
Return T if MUTEX is locked by current thread.
Release MUTEX. Return NIL. Consequences are undefined if MUTEX is locked by another thread or is already unlocked.
Remove KEY from HASH.
Return T if KEY was present in HASH, otherwise return NIL.
Find and remove KEY and its associated value from binary tree M. Return t if KEY was removed, nil if not found.
Same as (remhash key hash), only with reversed arguments.
N-ary version of REM-GMAP:
remove a list of keys from M. Return M.
Abort the current transaction and re-run it again from the beginning.
Before re-executing, the transaction will wait on all variables that it read until at least one of them changes.
stmx
.
Function equivalent of the ATOMIC macro.
Run the function TX inside a memory transaction.
If the transaction is invalid (conflicts) re-run TX immediately, ignoring
any error it may signal.
Otherwise, commit if TX returns normally, or rollback if it signals an error.
Finally, if TX called (retry), re-run it after at least some of the transactional memory it read has changed.
stmx
.
Function variant of ‘orelse’. Execute the functions in FUNCS list
one by one from left to right in separate, nested transactions until one succeeds
(i.e. commits) or signals an error.
If a nested transaction is invalid or wants to retry, run the next one.
Returns the value of the transaction that succeeded,
or signals the error raised by the transaction that failed.
Can only be used inside an ATOMIC block.
stmx
.
Set and return value of atomic COUNTER.
Set feature F to VALUE, even if F is already present in *FEATURE-LIST*. Return VALUE.
Set the value of each feature in PLIST, even if the feature is already
present in *FEATURE-LIST*. Each element in PLIST must be either
a pair (FEATURE VALUE) or a simple atom FEATURE.
In the latter case, the FEATURE value will default to T.
Add KEY to HASH, associating it to VALUE. Return VALUE.
Add KEY to binary tree M if not present, and associate KEY to VALUE in M. Return VALUE.
Shortcut for (setf (gethash key hash) value)
Create and return a new SIMPLE-TVECTOR.
Return the length of simple-tvector TVEC.
Print the things to a string and return it
Variant of SXHASH designed for EQUALP tests, i.e.
(equalp x y) implies (= (sxhash-equalp x) (sxhash-equalp y)).
A common use is for ghash-tables and thash-tables that use :test ’equalp
Construct a new talist by adding the pair (KEY . DATUM) to TALIST.
Return the tcons in TALIST whose tcar is equal (by a given test or EQL) to the ITEM.
Return NIL if OBJECT is a TCONS, and T otherwise.
Return the CAR of the CAAAR of a TLIST.
Set the CAR of the CAAAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CAADR of a TLIST.
Set the CAR of the CAADR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CAAR of a TLIST.
Set the CAR of the CAAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CADAR of a TLIST.
Set the CAR of the CADAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CADDR of a TLIST.
Set the CAR of the CADDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CADR of a TLIST.
Set the CAR of the CADR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CAR of a TLIST.
Set the CAR of the CAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CDAAR of a TLIST.
Set the CAR of the CDAAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CDADR of a TLIST.
Set the CAR of the CDADR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CDAR of a TLIST.
Set the CAR of the CDAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CDDAR of a TLIST.
Set the CAR of the CDDAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CDDR of a TLIST.
Set the CAR of the CDDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CAR of the CDR of a TLIST.
Set the CAR of the CDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the 1st object in a TLIST.
Return the CDR of the CAAAR of a TLIST.
Set the CDR of the CAAAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CAADR of a TLIST.
Set the CDR of the CAADR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CAAR of a TLIST.
Set the CDR of the CAAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CADAR of a TLIST.
Set the CDR of the CADAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CADDR of a TLIST.
Set the CDR of the CADDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CADR of a TLIST.
Set the CDR of the CADR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CAR of a TLIST.
Set the CDR of the CAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CDAAR of a TLIST.
Set the CDR of the CDAAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CDADR of a TLIST.
Set the CDR of the CDADR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CDAR of a TLIST.
Set the CDR of the CDAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CDDAR of a TLIST.
Set the CDR of the CDDAR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CDDR of a TLIST.
Set the CDR of the CDDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CDR of a TLIST.
Set the CDR of the CDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return all but the first object in a TLIST.
Create and return a new TCELL.
Create and return a new TCONS.
Return the 8th object in a TLIST or NIL if there is no 8th object.
Set the 8th object in a TLIST.
This is the recommended way to test for the end of a proper TLIST. It returns true if OBJECT is NIL, false if OBJECT is a TCONS, and an error for any other type of OBJECT.
Return the 5th object in a TLIST or NIL if there is no 5th object.
Set the 5th object in a TLIST.
Return the first element in a TCONS or TLIST.
Return the 4th object in a TLIST or NIL if there is no 4th object.
Set the 4th object in a TLIST.
Return the last N conses (not the last element!) of a TLIST.
Create and return a new TLIST, whose cells are TCONS.
Return a TLIST of the arguments with last TCONS a dotted pair.
Return the length of the given TLIST, or NIL if the TLIST is circular.
Return the 9th object in a TLIST or NIL if there is no 9th object.
Set the 9th object in a TLIST.
Return the Nth object in a TLIST where the TCAR is the zero-th element.
Set the Nth element of TLIST to NEWVAL.
Performs the TCDR function N times on a TLIST.
Construct an association list from KEYS and DATA (adding to TALIST).
Voluntarily abort a hardware memory transaction
with an error-code equal to +transaction-user-abort+.
If a transaction is in progress, TRANSACTION-ABORT does not return normally:
execution is resumed at the instruction immediately after the outermost
TRANSACTION-BEGIN.
If called without an active transaction, TRANSACTION-ABORT returns normally with an implementation-dependent value.
Start a hardware memory transaction.
Return +transaction-started+ if transaction started successfully,
otherwise return code of the error that caused the transaction to abort.
Invoking TRANSACTION-BEGIN while there is already a running hardware memory transaction has implementation-dependent effects.
Commit a hardware memory transaction.
Return normally (with an implementation-dependent value) if commit is successful,
otherwise abort the transaction.
In case the transaction is aborted, all effects of code between TRANSACTION-BEGIN
and TRANSACTION-END are rolled back (undone):
execution resumes at the instruction immediately after TRANSACTION-BEGIN,
in such a way that TRANSACTION-BEGIN will appear to have returned
a non-zero error code (that describes the abort reason).
Invoking TRANSACTION-END without a running hardware memory transaction
has undefined consequences.
If ERR-CODE is the result returned by (TRANSACTION-BEGIN) of an *aborted* transaction,
return T if re-running the same transaction has a possibility to succeed,
i.e. if the abort reason was temporary (as for example a conflict with another thread).
Return NIL if re-running the same transaction has no possibility to succeed.
Return T if a hardware memory transaction is currently in progress, otherwise return NIL.
Test for RTM, i.e. hardware memory transactions.
RTM is supported if (cpuid 7) returns ebx with bit 11 set.
If a processor does not support HLE, trying to execute
the assembler instructions XBEGIN, XEND, XABORT and XTEST
will generate faults.
Return true if inside a software or hardware transaction.
stmx
.
Return the cons in TALIST whose tcdr is equal (by a given test or EQL) to the ITEM.
Return the rest element in a TCONS or TLIST.
Try to acquire MUTEX. Return T if successful, or NIL if MUTEX was already locked.
Return the 2nd object in a TLIST or NIL if there is no 2nd object.
Set the 2nd object in a TLIST.
Return the 7th object in a TLIST or NIL if there is no 7th object.
Set the 7th object in a TLIST.
Return the 6th object in a TLIST or NIL if there is no 6th object.
Set the 6th object in a TLIST.
Create and return a new TSTACK.
Return the INDEX-th element of simple-tvector TVEC. Works both inside and outside transactions
Return the 10th object in a TLIST or NIL if there is no 10th object.
Set the 10th object in a TLIST.
Return the 3rd object in a TLIST or NIL if there is no 3rd object.
Set the 3rd object in a TLIST.
Return T if X and Y are isomorphic TLIST trees with identical leaves.
Unbind the value inside transactional variable VAR.
Works both outside and inside transactions.
During transactions, it uses transaction log to record the ’unbound’ value.
stmx
.
Remove all values contained in PLACE. Return PLACE.
Return nil if PLACE contains at least one value, otherwise return t.
tchannel
)) ¶Tchannels are write-only: it is never possible to read values from them, so assume they are always empty and return t.
Return t if PLACE cannot contain more values, otherwise return nil.
tport
)) ¶Tports are read-only: it is never possible to store values in them, so assume they are always full and return t.
tchannel
)) ¶Tchannels can contain unlimited values: they are never full, so always return nil.
Default implementation: assumes that PLACE can contain only one value.
Return one value stored in PLACE without removing it, and t as multiple values. If PLACE contains no values, return (values DEFAULT nil).
bheap
) &optional default) ¶Return the first value in bheap Q without removing it, and t as multiple values. Return (values DEFAULT nil) if Q contains no values.
tport
) &optional default) ¶Return the first value in tport P without removing it, and t as multiple values. Return (values DEFAULT nil) if P contains no value.
tfifo
) &optional default) ¶Return the first value in tfifo F without removing it, and t as multiple values. Return (values DEFAULT nil) if F contains no value.
tstack
) &optional default) ¶Return the first value in tstack S without removing it, and t as multiple values. Return (values DEFAULT nil) if S contains no values.
Wait until PLACE can contain more values, then store VALUE in it and return VALUE.
tchannel
) value) ¶Append VALUE as last element in tchannel C and return VALUE.
Since tchannel can contain unlimited values, this method never blocks.
tfifo
) value) ¶Append VALUE as last element in tfifo F and return VALUE.
Since tfifo can contain unlimited values, this method never blocks.
tstack
) value) ¶Insert VALUE as first element in tstack S and return VALUE. Since tstack can contain unlimited values, this method never blocks.
Wait until PLACE contains at least one value, then remove and return one value.
tport
)) ¶Wait until tport P contains at least one value, then remove and return the first value.
tfifo
)) ¶Wait until tfifo F contains at least one value, then remove and return the first value.
tstack
)) ¶Wait until tstack S contains at least one value, then remove and return the first value.
If PLACE can contain more values, store VALUE it and return t and VALUE as multiple values. Otherwise return (values nil nil)
bheap
) value) ¶Store VALUE in bheap Q. Return t and VALUE This method never fails.
tchannel
) value) ¶Append VALUE to tchannel C and return (values t VALUE).
Since tchannel can contain unlimited values, this method never fails.
tfifo
) value) ¶Append VALUE as last element in tfifo F and return (values t VALUE). Since tfifo can contain unlimited values, this method never fails.
tstack
) value) ¶Append VALUE to tstack S and return (values t VALUE).
Since fifo can contain unlimited values, this method never fails.
tcell
) value) ¶hand-made, nonblocking version of (put place) for tcells. less general but approx. 3 times faster (on SBCL 1.0.57.0.debian, Linux amd64) than the unspecialized (try-put place) which calls (atomic (nonblocking (put place value)))
tvar
) value) ¶hand-made, nonblocking version of (put place) for TVARs.
Less general but approx. 3 times faster (on SBCL 1.0.57.0.debian,
Linux amd64) than the unspecialized (try-put place) which calls
(atomic (nonblocking (put place value)))
this method shows a general technique to convert a blocking, atomic operation into a nonblocking, atomic one: simply wrap it in (atomic (nonblocking ...))
If PLACE contains at least one value, remove one value and return t and it as multiple values. Otherwise return (values nil nil)
bheap
)) ¶If bheap S contains at least one value, remove the first value and return t and the first value as multiple values. Otherwise return (values nil nil)
tport
)) ¶If tport P contains at least one value, remove the first value and return t and the first value as multiple values. Otherwise return (values nil nil)
tfifo
)) ¶If tfifo F contains at least one value, remove the first value and return t and the first value as multiple values. Otherwise return (values nil nil)
tstack
)) ¶If tstack S contains at least one value, remove the first value and return t and the first value as multiple values. Otherwise return (values nil nil)
tcell
)) ¶hand-made, nonblocking version of (take place) for cells. less general but approx. 3 times faster (on SBCL 1.0.57.0.debian, Linux amd64) than the unspecialized (try-take place) which calls (atomic (nonblocking (take place)))
tvar
)) ¶hand-made, nonblocking version of (take place) for TVARs. Less general but approx. 3 times faster (on SBCL 1.0.57.0.debian, Linux amd64) than the unspecialized (try-take place) which calls (atomic (nonblocking (take place)))
this method shows a general technique to convert a blocking, atomic operation into a nonblocking, atomic one: simply wrap it in (atomic (nonblocking ...))
transactional-class
) slot-name direct-slots) ¶Compose DIRECT-SLOTS coming from CLASS and all is superclasses into a single EFFECTIVE-SLOT.
If more than one transactional-direct-slot with the same name is present,
ensure that all of them have the same :transactional flag value (all T or all NIL),
otherwise signal an error.
sb-mop
.
transactional-class
) &rest initargs) ¶sb-mop
.
transactional-class
) &rest initargs) ¶sb-mop
.
tfifo
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of TFIFO *before* the normal slots initialization.
tchannel
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of TCHANNEL *before* the normal slots initialization.
tmap
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of TMAP *before* the normal slots initialization.
thash-table
) &rest other-keys) ¶thash-table
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of THASH-TABLE *before* the normal slots initialization.
ghash-table
) &rest other-keys &key initial-capacity) ¶tstack
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of TSTACK *before* the normal slots initialization.
tcell
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of TCELL *before* the normal slots initialization.
tport
) &key &allow-other-keys) ¶Initialize the reading tport P for a multicast tchannel.
tport
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of TPORT *before* the normal slots initialization.
thash-pair
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of THASH-PAIR *before* the normal slots initialization.
tnode
) &key &allow-other-keys) ¶Put a TVAR into every transactional direct slot of TNODE *before* the normal slots initialization.
ghash-table
) stream-0) ¶ghash-pair
) stream-0) ¶transactional-class
) instance (slot transactional-effective-slot
)) ¶sb-mop
.
transactional-class
) instance (slot transactional-effective-slot
)) ¶sb-mop
.
transactional-class
) instance (slot transactional-effective-slot
)) ¶sb-mop
.
transactional-class
) instance (slot transactional-effective-slot
)) ¶sb-mop
.
transactional-object
) added-slots discarded-slots property-list &key &allow-other-keys) ¶Put TVARs into all newly-added transactional slots of INSTANCE
transactional-class
) (superclass standard-class
)) ¶sb-mop
.
structure-object
.
stmx.lang:atomic-counter-slot-type
0
structure-object
.
stmx.lang::atomic-t
Transactional cell holding two values. It is the STM equivalent of CONS cells.
To use TCONS cells, prepend T to the name of most list-manipulating functions. Examples:
(CONS a b) -> (TCONS a b)
(LIST ...) -> (TLIST ...)
(FIRST c) -> (TFIRST c)
(REST c) -> (TREST c) and so on
structure-object
.
common-lisp
.
(stmx:transactional t)
(stmx::tstruct-slot-initialize (quote stmx.util:tcons) (quote first) (quote nil))
common-lisp
.
(stmx:transactional t)
(stmx::tstruct-slot-initialize (quote stmx.util:tcons) (quote rest) (quote nil))
a transactional variable (tvar) is the smallest unit of transactional memory.
it contains a single value that can be read or written during a transaction
using ($-slot var) and (setf ($-slot var) value).
tvars are seldom used directly, since transactional objects (tobjs) wrap them
with a more convenient interface: you can read and write normally the slots
of a transactional object (with slot-value, accessors ...), and behind
the scenes the slots will be stored in transactional memory implemented by tvars.
stmx
.
structure-object
.
stmx::version-type
stmx::+invalid-version+
stmx:+unbound-tvar+
fixnum
stmx::+invalid-version+
This slot is read-only.
(or null hash-table)
(bordeaux-threads:make-lock "tvar-waiting")
This slot is read-only.
Generic hash-table. Allows custom :test argument at creation - default is ’eql.
If :test is not one of ’eq ’eql or ’equal, also requires explicit :hash
argument at creation.
Not so useful by itself (standard CL:HASH-TABLE is usually faster),
it is the base for transactional hash-table implementation THASH-TABLE.
(or stmx.util::ghash-vector stmx:tvar)
stmx.util::ghash-test-fun
stmx.util::ghash-hash-fun
stmx.util::ghash-aref-fun
(function svref)
stmx.util::ghash-set-aref-fun
(function stmx.util::set-svref)
common-lisp
.
(or null fixnum stmx:tvar)
0
symbol
(quote eql)
:test
symbol
:hash
Generic binary tree
(or null stmx.util::gmap-node stmx:tvar)
function
This slot is read-only.
common-lisp
.
(or null fixnum stmx:tvar)
0
This slot is read-only.
Red-black tree implementation of sorted binary map
stmx.util::+empty-tcell+
:value
Transactional multicast channel supporting unlimited reading ports.
Values written into the tchannel are available to all reading ports in the same order.
References to values written into the tchannel are kept only as long as
one or more ports still need to read them.
(or stmx.util:tcons stmx:tvar)
(stmx.util:tcons nil nil)
Transactional hash table.
Transactional sorted map, implemented with red-black tree
Transactional reading port for a multicast tchannel.
Values written into the tchannel are available to all reading ports in the same order.
(or cons stmx:tvar)
stmx.util:tchannel
(error "missing :channel argument instantiating ~a or a subclass" (quote stmx.util:tport))
:channel
This slot is read-only.
The metaclass for transactional classes.
Classes defined with this metaclass have extra slot options, see the class TRANSACTIONAL-DIRECT-SLOT for details.
stmx
.
standard-class
.
Superclass of all transactional objects.
stmx
.
tcell
.
tchannel
.
tfifo
.
thash-pair
.
thash-table
.
tmap
.
tnode
.
tport
.
tstack
.
(or list stmx:tvar)
stmx.util::top
ATOMIC-NUM must be a type suitable for ATOMIC-INCF and ATOMIC-DECF. STMX also assumes it is the same or wider than fixnum.
SIMPLE-TVECTOR is a transactional, one dimensional array. It is currently a deftype, not a class or struct: methods cannot be specialized on it.
Empty TCELL objects actually contain this symbol in their VALUE slot. Use with care.
Default initial capacity of a GHASH-TABLE.
Maximum capacity of a GHASH-TABLE.
Equal to MOST-POSITIVE-FIXNUM rounded down to nearest power of 2.
+global-clock+ VERSION is incremented by 2 each time: the lowest bit is reserved as "locked" flag in TVARs versioning - used if TVAR-LOCK feature is equal to :BIT.
stmx
.
+global-clock+ NOHW-COUNTER incremented by 2 each time: the lowest bit is reserved as "prevent HW transactions"
stmx
.
A boolean controlling the behaviour of the function (slot-value)
and of slot accessors for TOBJs slots:
- if false, (slot-value) and accessors will get or set the actual TVAR stored
inside the slot.
- if true, (slot-value) and accessors will get or set the value stored inside
the slot’s TVAR.
This flag is almost always true; it is temporarily set to false during some MOP calls (slot-value-using-class ...) that implement access to TOBJs slots.
stmx
.
A flag indicating if transactions are being recorded to TLOGs or not.
Recording is normally enabled during transactions,
while it is normally disabled in these cases:
- outside transactions
- when initializing TOBJs slots
- during some MOP calls (slot-value-using-class etc.) that implement
access to TOBJs slots.
stmx
.
Run BODY in a hardware memory transaction.
If the transaction aborts, retry it as long as it has chances to succeed.
If it has no chances to succeed, execute FALLBACK.
Warning: if a transaction is already running, execute BODY inside it
stmx
.
Like PUSH, but atomic. PLACE may be read multiple times before the operation completes – the write does not occur until such time that no other thread modified PLACE between the read and the write.
Works only on places supported by ATOMIC-COMPARE-AND-SWAP.
stmx
.
Execute BODY on every transactional direct slot (not inherited) of CLASS.
stmx
.
Execute BODY on every transactional slot (direct or inherited) of CLASS.
stmx
.
Execute BODY on each KEY/VALUE contained in FIFO. Return NIL.
stmx
.
Execute BODY on each TXPAIR contained in FIFO. Return NIL.
stmx
.
Execute BODY on each GHASH-PAIR pair contained in HASH. Return NIL.
Execute BODY in order on each key/value pair contained in M:
first execute it on the smallest key, then the second smallest...
finally execute BODY on the largest key. Return nil.
If :FROM-END is true, BODY will be executed first on the largest key,
then on the second largest key... and finally on the smallest key.
Adding or removing keys from M during this call (even from other threads) has undefined consequences. Not even the current key can be removed.
Execute BODY inside a loop, iterating on tstruct-def STRUCT-DEF and all its superclasses
stmx
.
Analogous to DOLIST, iterates on transactional list TLIST.
On each iteration, sets VAR to the element and executes BODY inside a tagbody.
Returns RESULT. Note: when RESULT is executed, VAR is set to NIL.
An implicit block named NIL surrounds DO-TLIST, so RETURN can be used
to terminate immediately the iterations and return zero or more values.
Execute BODY on tstruct-def STRUCT-DEF and all its superclasses
stmx
.
Execute BODY on each KEY/VALUE contained in FIFO. Return NIL.
stmx
.
Execute BODY on each TXPAIR contained in FIFO. Return NIL.
stmx
.
Execute BODY on each KEY/VALUE contained in HASH. Return NIL.
stmx
.
Execute BODY on each TXPAIR pair contained in HASH. Return NIL.
stmx
.
Decrement by one the number of software-only transaction commits currently running.
This function must be called at the end of each software-only transaction commit, (retry), or any other operation incompatible with hardware transactions, in order to let the latter run, since their current implementations are mutually incompatible.
stmx
.
Return the features of the GLOBAL-CLOCK algorithm, i.e. a list containing zero or more of :SUITABLE-FOR-HW-TRANSACTIONS and :SPURIOUS-FAILURES-IN-SINGLE-THREAD. The list of possible features will be expanded as more GLOBAL-CLOCK algorithms are implemented.
stmx
.
Return the number of operations currently running that are incompatible with
hardware transactions. Example of operations that AT THE MOMENT are incompatible with
hardware transactions include:
1) software-only transaction commits
2) (retry)
This function must be called at the beginning of each hardware transaction
in order to detect if an incompatible operation is started during the hardware
transaction, and abort the transaction in such case.
stmx
.
Return the value to use as new transaction "read version",
This function must be called after a hardware transaction failed/aborted and before rerunning it.
stmx
.
Return the value to use as hardware transaction "read version".
This function must be invoked once upon starting a hardware transaction for the first time. In case the transaction just aborted and is being re-executed, invoke instead (GLOBAL-CLOCK/HW/AFTER-ABORT).
stmx
.
Return the value to use as hardware transaction "write version",
given the transaction current READ-VERSION that was assigned at transaction start.
During hardware transactions - and also during hardware-based commits of software transactions - this function must be called once before writing the first TVAR.
stmx
.
Return the value to use as TVAR "write version", given the hardware
transaction current WRITE-VERSION that was assigned by GLOBAL-CLOCK/HW/START-WRITE
before the transaction started writing to TVARs.
This function must be called for **each** TVAR being written during
hardware-assisted commit phase of software transactions
and during pure hardware transactions.
stmx
.
Increment by one the number of operations currently running that are incompatible with
hardware transactions.
This function must be called at the beginning of each software-only transaction commit, (retry), or any other operation incompatible with hardware transactions, in order to abort the latter, since their current implementations are mutually incompatible.
stmx
.
Return the value to use as new transaction "read version",
This function must be called after a software transaction failed/aborted and before rerunning it.
stmx
.
Return the value to use as software transaction "read version".
This function must be invoked once upon starting a software transaction for the first time. In case the transaction just aborted and is being re-executed, invoke instead (GLOBAL-CLOCK/SW/AFTER-ABORT).
stmx
.
Return the value to use as softarw transaction "write version", given the software transaction current READ-VERSION that was assigned at transaction start.
During software-only commits, this function must be called once before committing the first TVAR write.
stmx
.
Return the value to use as TVAR "write version", given the software
transaction current WRITE-VERSION that was assigned by GLOBAL-CLOCK/SW/START-WRITE
before the transaction started writing to TVARs.
Fhis function must be called for **each** TVAR being written
during software-only commit phase of software transactions.
stmx
.
Return T if TVAR-VERSION is compatible with transaction "read version".
If this function returns NIL, the transaction must be aborted.
During software transactions, this function must be invoked after every TVAR read and before returning the TVAR value to the application code. During hardware transactions, this function is not used.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/AFTER-ABORT. Return the current +gv+ value.
stmx
.
This is GV1 implementation of GV1/DECF-NOHW-COUNTER. It does nothing and returns zero.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/FEATURES.
Return nil, i.e. not ’(:suitable-for-hw-transactions) because (GV1/START-WRITE ...) increments the global clock, which causes conflicts and aborts when multiple hardware transactions are running simultaneously.
stmx
.
This is GV1 implementation of GV1/GET-NOHW-COUNTER. It does nothing and returns zero.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/HW/AFTER-ABORT. Calls GV1/AFTER-ABORT.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/HW/START-READ. Calls GV1/START-READ.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/HW/START-WRITE. Calls GV1/START-WRITE.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/HW/STAT-ABORTED. Calls GV1/STAT-ABORTED.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/HW/STAT-COMMITTED. Calls GV1/STAT-COMMITTED.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/HW/WRITE. Calls GV1/WRITE.
stmx
.
This is GV1 implementation of GV1/INCF-NOHW-COUNTER. It does nothing and returns zero.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/START-READ. Return the current +gv+ value.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/START-WRITE. Atomically increment +gv+ and return its new value.
stmx
.
This is GV1 implementation of GV1/STAT-ABORTED. It does nothing and returns zero.
stmx
.
This is GV1 implementation of GV1/STAT-COMMITTED. It does nothing and returns zero.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/SW/AFTER-ABORT. Calls GV1/AFTER-ABORT.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/SW/START-READ. Calls GV1/START-READ.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/SW/START-WRITE. Calls GV1/START-WRITE.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/SW/STAT-ABORTED. Calls GV1/STAT-ABORTED.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/SW/STAT-COMMITTED. Calls GV1/STAT-COMMITTED.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/SW/WRITE. Calls GV1/WRITE.
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/VALID-READ? Return (<= tvar-version read-version)
stmx
.
This is GV1 implementation of GLOBAL-CLOCK/WRITE. Return WRITE-VERSION.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/AFTER-ABORT. Increment +gv+ and return its new value.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/DECF-NOHW-COUNTER. Decrement by DELTA the slot NOHW-COUNTER of +gv+ and return its new value.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/FEATURES.
Return ’(:SUITABLE-FOR-HW-TRANSACTIONS :SPURIOUS-FAILURES-IN-SINGLE-THREAD)
because the global clock is incremented only by GV5/AFTER-ABORT, which avoids
incrementing it in GV5/START-WRITE (it would cause hardware transactions
to conflict with each other and abort) but also causes a 50% abort rate (!) even
in a single, isolated thread reading and writing its own transactional memory.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/GET-NOHW-COUNTER.
Return the number of software-only transaction commits currently running.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/HW/AFTER-ABORT. Calls GV5/AFTER-ABORT.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/HW/START-READ. Calls GV5/START-READ.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/HW/START-WRITE. Calls GV5/START-WRITE.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/HW/STAT-ABORTED. Calls GV5/STAT-ABORTED.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/HW/STAT-COMMITTED. Calls GV5/STAT-COMMITTED.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/HW/WRITE. Calls GV5/WRITE.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/INCF-NOHW-COUNTER. Increment by DELTA the slot NOHW-COUNTER of +gv+ and return its new value.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/START-READ. Return the current +gv+ value.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/START-WRITE. Return (1+ +gv+) without incrementing it.
stmx
.
This is GV5 implementation of GV5/STAT-ABORTED. It does nothing and returns zero.
stmx
.
This is GV5 implementation of GV5/STAT-COMMITTED. It does nothing and returns zero.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/SW/AFTER-ABORT. Calls GV5/AFTER-ABORT.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/SW/START-READ. Calls GV5/START-READ.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/SW/START-WRITE. Calls GV5/START-WRITE.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/SW/STAT-ABORTED. Calls GV5/STAT-ABORTED.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/SW/STAT-COMMITTED. Calls GV5/STAT-COMMITTED.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/SW/WRITE. Calls GV5/WRITE.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/VALID-READ? Return (<= tvar-version read-version)
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/{HW,SW}/WRITE. Return WRITE-VERSION.
stmx
.
Return T if GV6 is currently in GV5 mode, i.e. it allows HW transactions. Return NIL if GV6 is currently in GV1 mode, i.e. it forbids HW transactions.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/DECF-NOHW-COUNTER. Calls (GV5/DECF-NOHW-COUNTER).
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/FEATURES.
Return ’(:SUITABLE-FOR-HW-TRANSACTIONS :SPURIOUS-FAILURES-IN-SINGLE-THREAD)
just like GV5 because the global clock is based on GV5: it is usually not
incremented by GV6/START-WRITE, to prevent hardware transactions from
conflicting with each other.
This can cause very high abort rates of software transactions, so
GV6 adaptively switches to GV1 algorithm in the following cases:
a) software-only commits are in progress
b) abort rate is very high
in order to try to reduce the abort rates.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/GET-NOHW-COUNTER.
Return LOGIOR of two quantities:
1. (GV5/GET-NOHW-COUNTER)
2. the global-clock slot NOHW-FLAG
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/HW/AFTER-ABORT.
Calls (GV5/AFTER-ABORT), since GV1 mode forbids hardware transactions.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/HW/START-READ.
Calls (GV5/HW/START-READ), since GV1 mode forbids hardware transactions.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/HW/START-WRITE.
Calls (GV5/HW/START-WRITE), since GV1 mode forbids hardware transactions.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/HW/STAT-ABORTED.
It increases local-clock slot ABORTS and may decide to switch between GV1 and GV5 modes.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/HW/STAT-COMMITTED.
It increases local-clock slot COMMITS and may decide to switch between GV1 and GV5 modes.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/SW/WRITE.
Calls (GV5/HW/START-WRITE), since GV1 mode forbids hardware transactions.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/INCF-NOHW-COUNTER. Calls (GV5/INCF-NOHW-COUNTER).
stmx
.
This is GV6 implementation of GV6/STAT-ABORTED. It does nothing and returns zero.
stmx
.
This is GV6 implementation of GV6/STAT-COMMITTED. It does nothing and returns zero.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/SW/AFTER-ABORT.
Calls either (GV5/AFTER-ABORT) or (GV1/AFTER-ABORT), depending on the current mode.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/SW/START-READ.
Calls either (GV5/SW/START-READ) or (GV1/SW/START-READ), depending on the current mode.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/SW/START-WRITE.
Calls either (GV5/START-WRITE) or (GV1/START-WRITE), depending on the current mode.
stmx
.
This is GV5 implementation of GLOBAL-CLOCK/SW/STAT-ABORTED.
It increases local-clock slot ABORTS and may decide to switch between GV1 and GV5 modes.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/SW/STAT-COMMITTED.
It increases local-clock slot COMMITS and may decide to switch between GV1 and GV5 modes.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/HW/WRITE.
Calls either (GV5/SW/WRITE) or (GV1/WRITE), depending on the current mode.
stmx
.
This is GV6 implementation of GLOBAL-CLOCK/VALID-READ? Return (<= tvar-version read-version)
stmx
.
Return the WRITE-VERSION for the current hardware transaction
stmx
.
stmx
.
Return the raw tvar stored in a transactional slot.
stmx
.
Run BODY in a software memory transaction. All changes to transactional memory
will be visible to other threads only after BODY returns normally (commits).
If BODY signals an error, its effects on transactional memory are rolled back
and the error is propagated normally.
Also, no work-in-progress transactional memory will ever be visible to other
threads.
stmx
.
Immediately abort a hardware memory transaction with a user-specified
ERR-CODE, which must be a constant between 0 and 255 (default: 1).
Note: the value returned by (transaction-begin) will also contain "somewhere"
the bits of ERR-CODE, but will have a different value.
See Intel x86-64 CPU instruction reference manual, section TSX, for details.
If a transaction is in progress, TRANSACTION-ABORT-MACRO does not return normally:
execution is resumed at the instruction immediately after the outermost
TRANSACTION-BEGIN.
If called without a running transaction, TRANSACTION-ABORT-MACRO returns normally with an implementation-dependent value.
Return T if $-hwtx and (setf $-hwtx) should be used, otherwise return NIL.
Return T if $-swtx and (setf $-swtx) should be used, otherwise return NIL.
stmx
.
stmx
.
Enable recording of reads and writes to TLOGs while executing BODY.
stmx
.
Use LOG as the current transaction log and enable recording of transactions to TLOGs while executing BODY.
stmx
.
Use LOG as the current software transaction log while executing BODY.
stmx
.
Disable recording of transactions to TLOGs and disable hiding TVARs inside TOBJs slots while executing BODY.
stmx
.
stmx
.
$-notx
(function).
set-$-notx
(function).
Get the value from the transactional variable VAR and return it.
Return +unbound-tvar+ if VAR is not bound to a value.
Works ONLY outside memory transactions.
stmx
.
Get the value from the transactional variable VAR and return it.
Return +unbound-tvar+ if VAR is not bound to a value.
Works ONLY inside software memory transactions.
stmx
.
Rebalance red-black tree after adding a child to (first stack).
Return (values node stack) for some rebalanced node and its path from root.
If stack is nil, returned node is the new root to set.
Remove (first stack) from red-black tree M and return (values some-node that-node-stack) from rebalanced tree. Some-node will be nil only if the tree is empty after removal.
Remove from red-black tree M black leaf NODE, whose path is STACK. Return some node in rebalanced tree and its stack as multiple values
Function equivalent of the SW-ATOMIC macro.
Run the function TX inside a transaction.
If the transaction is invalid (conflicts) re-run TX immediately, ignoring
any error it may signal.
Otherwise, commit if TX returns normally, or rollback if it signals an error.
Finally, if TX called (retry), re-run it after at least some of the transactional memory it read has changed.
stmx
.
stmx
.
stmx
.
rest
.
Set VALUE as the first element in a TCONS or non-null TLIST. This function should always be executed inside an STMX atomic block.
Set VALUE as the rest element in a TCONS or non-null TLIST.
This function should always be executed inside an STMX atomic block.
Set VALUE as the first element in a TCONS or non-null TLIST.
This function should always be executed inside an STMX atomic block.
Set VALUE as the rest element in a TCONS or non-null TLIST.
This function should always be executed inside an STMX atomic block.
Internal function used only by TVAR-VALUE-AND-VERSION-OR-FAIL.
stmx
.
Add VALUE to bheap Q. Return VALUE.
Adjust a single slot definition for a transactional class.
Unless the slot is defined as :transactional NIL,
wrap its :initform with a TVAR and alter its :type to also accept TVARs
stmx
.
Adjust each slot definition for a transactional class:
unless a slot is defined as :transactional NIL, wrap its :initform with a TVAR
and alter its :type to also accept TVARs
stmx
.
Return a form suitable for MACROLET
stmx
.
Return t if NODE is black. Nil nodes are assumed to be black
stmx
.
stmx
.
Remove all values from bheap Q. Return Q.
Remove all features from *FEATURE-LIST*.
Remove all transactional reads and writes stored in LOG,
as well as functions registered with BEFORE-COMMIT and AFTER-COMMIT;
return LOG itself.
Remove all keys and values from HASH. Return HASH.
stmx
.
Commit a TLOG to memory.
It returns a boolean specifying whether or not the transaction
log was committed. If the transaction log cannot be committed
it either means that:
a) the TLOG is invalid - then the whole transaction must be re-executed
b) another TLOG is writing the same TVARs being committed
so that TVARs locks could not be aquired - also in this case
the whole transaction will be re-executed, as there is little hope
that the TLOG will still be valid.
Note: internally invokes GLOBAL-CLOCK/{HW,SW}/STAT-{COMMITTED,ABORTED}
stmx
.
Commit LOG into its parent log; return LOG.
Unlike (commit log), this function is guaranteed to always succeed.
Implementation note: copy tlog-reads, tlog-writes, tlog-before-commit and tlog-after-commit into parent, or swap them with parent
stmx
.
Actually COMMIT, i.e. write new values into TVARs. Also unlock all TVARs.
stmx
.
Compare entries at positions N1 and N2 in bqueue Q.
Compare KEY1 agains KEY2 using the comparison function PRED.
Return K< if KEY1 compares as lesser than KEY2,
return K> if KEY1 compares as greater than KEY2,
return K= if KEY1 and KEY2 compare as equal.
Return T if all the features in ARGS are present in *FEATURE-LIST*, otherwise return NIL.
Return T if feature has the specified value, otherwise return NIL.
Return NIL if the feature in ARGS is present in *FEATURE-LIST*, otherwise return T.
Return T if at least one feature in ARGS is present in *FEATURE-LIST*, otherwise return NIL.
Return T if symbol exists in specified package, otherwise return NIL. Arguments are: package-name symbol-name.
Return a copy of ghash-table HASH.
The copy will have the same class, test and hash functions, and elements.
Return a new tlist which has the same elements as TLIST. TLIST may be improper.
Recursively copy trees of TCONSes.
Clear DST, then copy SRC contents into it. Return NIL.
stmx
.
test for multi-threading support: :STMX/DISABLE-THREADS most not be present CL:*FEATURES*, BORDEAUX-THREADS:*SUPPORTS-THREADS-P* must be non-NIL, and (BT:MAKE-THREAD) and (BT:JOIN-THREAD) must work.
Return t if bheap Q is empty.
Create tlog-after-commit log if nil, and return it.
stmx
.
Create tlog-before-commit log if nil, and return it.
stmx
.
Add TRANSACTIONAL-OBJECT as the first superclass of a transactional class if not already present in the superclass list.
stmx
.
Double the length of vector V, i.e. create a new larger vector
and copy elements from V to the new vector.
Return the new, larger vector.
This method exists to simplify the implementation of transactional priority queue TQUEUE: as long as bheap is concerned, (vector-push-extend ...) would be fine.
len
.
vec
.
Return index of the first tx that wants to rerun or is invalid. Return nil if all tx are valid and want to retry.
stmx
.
If KEY is present in HASH, return the GHASH-PAIR containing KEY. Otherwise return NIL.
Return stack of visited nodes from root to insertion point for KEY, and comparison between the KEY to insert and last visited node’s key, as multiple values
If KEY is present in HASH, return the TXPAIR containing KEY. Otherwise return NIL.
stmx
.
Flip NODE color. Return the new color.
Return a no-longer-needed TLOG to the pool.
Return the first value in bheap Q without removing it, and t as multiple values. Return (values DEFAULT nil) if Q contains no values.
If KEY is associated to VALUE in HASH, return (values VALUE t) Otherwise return (values DEFAULT nil).
stmx
.
Return the bitmask to use for hash indexes.
Return the array subscript in HASH corresponding to HASH-CODE.
Return T if ghash-table HASH contains at most COUNT key/value entries.
Return T if ghash-table HASH contains more than COUNT key/value entries.
Publish (GLOBAL-CLOCK/FEATURES) to stmx.lang::*feature-list* so they can be tested with #?+ and #?- reader macros.
stmx
.
Return T if gmap M contains at most COUNT key/value entries.
Return T if ghash-table HASH contains more than COUNT key/value entries.
stmx
.
stmx
.
stmx
.
stmx
.
Establish heap invariant in bheap Q. Return Q. Destructively modifies (vector-of Q).
After committing, call in order all functions registered with (after-commit)
If any of them signals an error, it will be propagated to the caller
but the TLOG will remain committed.
stmx
.
Before committing, call in order all functions registered
with (before-commit)
If any of them signals an error, the transaction will rollback
and the error will be propagated to the caller
stmx
.
Given the lambda-list parameter PARAM, which can be of the forms
arg-name
(arg-name default-value)
((keyword-name arg-name) default-value)
return arg-name
stmx
.
Given the lambda-list parameter PARAM, which can be of the forms
arg-name
(arg-name default-value)
(arg-name default-value arg-set-p)
((keyword-name arg-name) default-value)
((keyword-name arg-name) default-value arg-set-p)
return arg-set-p, or NIL if not present
stmx
.
Quote all default values in LAMBDA-LIST. Useful to use in a macro a lambda list created for a function.
stmx
.
Remove all occurrences of &optional &key &rest &allow-other-keys and &aux from LAMBDA-LIST.
Also extract actual argument names from &optional, &key and &aux parameters.
For example, it converts:
(arg1 &optional (arg2 default2) &rest rest &key arg3 (arg4 default4) ((:key5 arg5) default5 set5))
to
(arg1 arg2 rest arg3 arg4 arg5 set5)
stmx
.
List the direct slots named SLOT-NAME found in class precedence list.
stmx
.
Return a new tlist which has the same elements as LIST. LIST may be improper.
Add LOG to VAR’s waiting list, so that LOG will be notified if VAR changes.
Listen on tvars recorded in LOG, i.e. register to get notified if they change. Return t if log is valid and wait-tlog should sleep, otherwise return nil.
Return the thread owning a lock, or NIL if lock is free.
Call each function in FUNCS vector. Take care that functions being invoked
can register other functions - or themselves again - with (before-commit ...)
or with (after-commit ...).
This means new elements can be appended to FUNCS vector during the loop
=> (loop for func across funcs ...) is not enough.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
Invoke FUNC in reverse order on each key/value pair contained in M:
first invoke it on the largest key, then the second largest...
finally invoke FUNC on the smallest key. Return nil.
FUNC must be a function accepting two arguments: key and value.
Adding or removing keys from M during this call (even from other threads) has undefined consequences. Not even the current key can be removed.
Merge (tlog-reads LOG1) and (tlog-reads LOG2).
Return merged TLOG (either LOG1 or LOG2) if tlog-reads LOG1 and LOG2
are compatible, i.e. if they contain the same values for the TVARs
common to both, otherwise return NIL.
(in the latter case, the merge will not be completed).
Destructively modifies (tlog-reads log1) and (tlog-reads log2).
stmx
.
Return merged tlog of all tx, or nil if some tlog are mutually incompatible.
stmx
.
Copy hash-table SRC into hash-table DST.
Return t if SRC and DST are compatible,
i.e. if they contain eq values for the keys common to both,
otherwise return nil.
(in the latter case, the merge will not be completed).
stmx
.
If LOG is not nil, clear it as per (clear-tlog), otherwise create a new tlog as per (new-tlog). In both cases the tlog is returned, and its parent is set to PARENT.
Get a TLOG from pool or create one, and return it.
Wake up all threads waiting for VAR to change.
Wake up all threads waiting for VAR to change.
stmx
.
If present, quote the default value of the lambda-list parameter PARAM. Useful to use in a macro a lambda list created for a function.
stmx
.
stmx
.
Get the value from the transactional variable VAR
and return it and t as multiple values.
If VAR is not bound to a value, return (values DEFAULT nil).
Works both inside and outside transactions.
stmx
.
Append PAIR as last element in txfifo F and return PAIR.
stmx
.
return the current value of VAR, or +unbound-tvar+ if VAR is not bound to a value.
This finction intentionally ignores transactions and it is only useful
for debugging purposes. please use ($-slot var) instead.
stmx
.
Set the VALUE of VAR. Return VALUE.
This function intentionally ignores transactions and it is only useful
for debugging purposes. Use (SETF ($-SLOT VAR) VALUE) or (SETF ($ VAR) VALUE) instead.
Return true if transactions are being recorded to TLOGs.
stmx
.
Return t if NODE is red. Nil nodes are assumed to be black
If bheap Q contains at least one value, remove the first value
and return it and t as multiple values.
Otherwise return (values DEFAULT nil)
Remove feature F from *FEATURE-LIST*.
Return T if F was present *FEATURE-LIST*, otherwise return NIL.
Unlink old-node from it parent and replace it with new-node. Return t if left child was replaced, nil if right child was replaced
Abort the current transaction and immediately re-run it from the
beginning without waiting. Automatically invoked when a SW transaction detects
a possibly inconsistent read.
stmx
.
Rotate left or right the subtree around node. Return new subtree root and also update parent’s link to subtree root.
Rotate left the subtree around node. Return new subtree root.
Rotate right the subtree around node. Return new subtree root.
Function version of NONBLOCKING macro: execute the function FUNC
in a nested transaction and:
a) in case of transaction conflicts, re-execute FUNC
b) if FUNC returns normally, commit and return multiple values:
T followed by the values returned by FUNC.
b) if FUNC signals an error, rollback and raise such error.
d) if FUNC attempts to retry, immediately return NIL without waiting/sleeping.
Can only be used inside an ATOMIC block.
stmx
.
Internal function invoked by RUN-SW-ATOMIC and RUN-ORELSE.
Run once the function TX inside a transaction,
using LOG as its transaction log.
stmx
.
Function equivalent of the SW-ATOMIC macro.
Run the function TX inside a transaction.
If the transaction is invalid (conflicts) re-run TX immediately, ignoring
any error it may signal.
Otherwise, commit if TX returns normally, or rollback if it signals an error.
Finally, if TX called (retry), re-run it after at least some of the transactional memory it read has changed.
stmx
.
Store VALUE inside transactional variable VAR and return VALUE.
Works both outside and inside transactions.
During transactions, it uses transaction log to record the value.
Store VALUE inside transactional variable VAR and return VALUE. Works ONLY outside memory transactions.
stmx
.
Store VALUE inside transactional variable VAR and return VALUE. Works ONLY inside software memory transactions.
On several CL implementations, (setf svref) is not a function.
Set the INDEX-th element of simple-tvector TVEC to VALUE. Works both inside and outside transactions
Set the VALUE and VERSION of VAR. If lock is a bit inside TVAR version, also set it (which may unlock VAR!). Return VALUE.
stmx
.
Add KEY to HASH, associating it to VALUE. Return VALUE.
stmx
.
Return T if a TLOG is valid. Similar to (valid? log), but does *not* check log parents for validity.
stmx
.
Does SLOT-FORM define a transactional slot?
Direct slots defined in transactional classes are by default transactional,
UNLESS explicitly defined with the option :transactional nil.
stmx
.
Return T if at least one feature from LIST is present in *FEATURE-LIST* and have non-NIL value.
Construct a new tlist by concatenating the TLIST arguments
Construct a new tlist by concatenating the LIST arguments
Return the CAR of the CDDDR of a TLIST.
Set the CAR of the CDDDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return the CDR of the CDDDR of a TLIST.
Set the CDR of the CDDDR of a TLIST.
This function should always be executed inside an STMX atomic block.
Return a new tlist, whose elements are those of TLIST that appear before OBJECT. If OBJECT is not a tail of TLIST, a copy of TLIST is returned. TLIST must be a proper tlist or a dotted tlist.
Return true if OBJECT is a TLIST, and NIL otherwise.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
Return (TNCONC (TNREVERSE X) Y).
Return (tappend (treverse x) y).
Change the TCAR of TCONS to X and return the TCONS.
Change the TCDR of TCONS to X and return the TCONS.
Try to lock VAR. Return T if locked successfully, otherwise return NIL.
stmx
.
Optionally sort WRITES in (tvar> ...) order,
then non-blocking acquire their locks in such order.
Reason: acquiring in unspecified order may cause livelock, as two transactions
may repeatedly try acquiring the same two TVARs in opposite order.
Return T if all VARS were locked successfully.
After return, LOCKED will contain all TXPAIR entries of locked VARS.
stmx
.
If VAR is not bound, bind it to VALUE and return (values VALUE t) If VAR is already bound to a value, return (values DEFAULT nil).
Works only inside software transactions.
stmx
.
Get the value from the transactional variable VAR,
unbind it and and return t and the original value as multiple values.
If VAR is not bound to a value, return (values nil DEFAULT).
Works both inside and outside transactions.
stmx
.
Return all the forms needed to define a transactional struct
stmx
.
Define accessor functions for SLOT of STRUCT-DEF
stmx
.
Define all accessor functions for STRUCT-DEF
stmx
.
Define the constructor function.
Note: TRANSACTIONAL-STRUCT supports only one constructor
stmx
.
Define constructors, copier and accessors functions
stmx
.
List %stmx-tstruct hidden accessor functions, in order to declaim them inline
stmx
.
List %stmx-tstruct hidden constructor and accessors functions, in order to declaim them inline
stmx
.
List all slots-def of a struct, including inherited ones.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
Return the %stmx-tstruct constructor name of a tstruct
stmx
.
Return the accessor default name of given struct slot
stmx
.
Return the reader name of given struct slot
stmx
.
Return the writer name of given struct slot
stmx
.
stmx
.
Return the constructor keyword argument of given struct slot
stmx
.
stmx
.
stmx
.
stmx
.
stmx
.
Return the %stmx-tstruct accessor symbol of given struct slot
stmx
.
stmx
.
Return T if VAR is valid, i.e. its value is EQ to EXPECTED-VAL
and VAR is locked by current thread or unlocked.
Return NIL if VAR has different value, or is locked by some other thread.
Return T if VAR is valid, i.e. its value is EQ to EXPECTED-VAL
and VAR is unlocked.
Return NIL if VAR has different value, or is locked by some thread (including current thread).
stmx
.
return as multiple values:
1) the current value of VAR, or +unbound-tvar+ if VAR is not bound to a value.
2) the current version of VAR, excluding any lock bit.
3) 0 if VAR is if free, or 1 if it’s locked or could not be read reliably
- for example because the version changed while reading.
stmx
.
stmx
.
stmx
.
Compare var1 and var2 with respect to age: newer tvars usually have larger tvar-id and are considered "larger". Returns (> (tvar-id var1) (tvar-id var2)).
stmx
.
If VAR’s value is stored in writes of transaction LOG, return the stored value. Otherwise, validate VAR version, add VAR into the reads of transaction LOG, and return (raw-value-of VAR). If VAR version validation fails, call (rerun).
TX-READ-OF is an internal function called by ($ VAR) and by reading TOBJs slots.
Store in transaction LOG the writing of VALUE into VAR; return VALUE.
TX-WRITE-OF is an internal function called by (SETF ($ VAR) VALUE) and by writing TOBJs slots.
stmx
.
Return the array subscript in HASH corresponding to TXHASH.
stmx
.
stmx
.
stmx
.
Return T if TYPESPEC is compatible with TYPE, i.e. if:
* TYPESPEC is equal to TYPE
* TYPESPEC is equal to (OR ... TYPESPEC-I ...) and at least one TYPESPEC-I is compatible with TYPE
* TYPESPEC is equal to (AND ... TYPESPEC-I ...) and all TYPESPEC-I are compatible with TYPE.
Otherwise return NIL.
stmx
.
Signal an unbound-slot error and allow the user to continue by specifying or storing a value.
stmx
.
Signal an unbound-slot error and allow the user to continue by specifying or storing a value.
Remove from GENERIC-FUNC-NAME the method specialized for CLASS-NAME
stmx
.
Remove from GENERIC-FUNC-NAME the method qualified :BEFORE and specialized for CLASS-NAME
stmx
.
Remove LOG from VAR’s waiting list, so that LOG will *not* be notified anymore if VAR changes.
Un-listen on tvars, i.e. deregister not to get notifications if they change.
Release vars in LOCKED in same order of acquisition.
stmx
.
Return t if LOG is valid and unlocked, i.e. it contains an up-to-date view of TVARs that were read during the transaction and none of them is locked by **other** threads.
stmx
.
Return t if LOG is valid and unlocked, i.e. it contains an up-to-date view of TVARs that were read during the transaction and none of them is locked, not even by the current thread.
stmx
.
Return t if LOG is valid, i.e. it contains an up-to-date view of TVARs that were read during the transaction.
stmx
.
Sleep, i.e. wait for relevant TVARs to change.
Return T if slept, or NIL if some TVAR definitely changed before sleeping.
Wait until the TVARs read during transaction have changed. Return T.
Allocate a GHASH-PAIR, initialize it with KEY, VALUE and NEXT and return it.
thash-table
) key value next) ¶ghash-table
) key value next) ¶Allocate a new GHASH-VECTOR with length = CAPACITY, initialize all its elements to NIL and return it.
thash-table
) capacity) ¶ghash-table
) capacity) ¶Create and return a copy of NODE appropriate for binary tree M. Methods must NOT invoke (incf (_ m count)).
Create and return a new node appropriate for binary tree M. Methods must NOT invoke (incf (_ m count)).
Rebalance binary tree M after inserting CHILD.
Remove (first STACK) from binary tree M and rebalance it.
Methods are supposed to explicitly (setf (_ m root) ...) when needed,
but must NOT invoke (decf (_ m count)).
stmx
.
slot-definition
)) ¶Generic implementation for SLOT-DEFINITION. Return NIL
transactional-effective-slot
)) ¶automatically generated reader method
transactional-direct-slot
)) ¶automatically generated reader method
stmx
.
transactional-effective-slot
)) ¶automatically generated writer method
transactional-direct-slot
)) ¶automatically generated writer method
Return a TSTRUCT-DEF containing the definition
of STRUCT-NAME and its direct slots, or NIL if STRUCT-NAME has no slots
stmx
.
(eql stmx.util:tcons)
)) ¶symbol
)) ¶Reflectively inspect definition and slots of structure-object class named STRUCT-NAME.
(eql structure-object)
)) ¶Instances of STRUCTURE-OBJECT have no slots
(eql t)
)) ¶Instances of T have no slots
(eql nil)
)) ¶Instances of NIL have no slots
Signalled by ORELSE to force re-running the parent transaction in case of conflicts. It is captured by ATOMIC, so it is visible to application code only in case of bugs
stmx
.
Signalled by RETRY. It is captured by ATOMIC and ORELSE, so it is visible to application code only in case of bugs
stmx
.
Parent class of all STMX compile errors
stmx
.
simple-error
.
Parent class of all STMX runtime errors
stmx
.
control-error
.
stmx
.
stmx.lang:atomic-counter-slot-type
0
bit
0
0
0
0
0
0
0
0
fixnum
0
fixnum
0
a transaction log (tlog) is a record of the reads and writes
to transactional memory performed during a transaction.
transaction logs are automatically populated by reading and writing
transactional objects (tobjs) or transactional variables (tvars),
and are later committed to memory if the transaction completes successfully.
stmx
.
structure-object
.
stmx::txhash-table
(stmx::make-txhash-table)
stmx::txhash-table
(stmx::make-txhash-table)
stmx::txfifo
(stmx::make-txfifo)
This slot is read-only.
stmx::version-type
stmx::+invalid-version+
(or null stmx::tlog)
bordeaux-threads
.
bordeaux-threads
.
boolean
(or null stmx::tlog-func-vector)
(or null stmx::tlog-func-vector)
stmx
.
structure-object
.
symbol
symbol
symbol
symbol
common-lisp
.
(or symbol cons)
symbol
list
list
stmx
.
structure-object
.
symbol
common-lisp
.
(or symbol cons)
t
boolean
symbol
symbol
boolean
t
list
a hash table specialized for tvar keys.
Priority queue implemented with a binary min-heap.
Elements that compare smaller will be the first (top) in the heap.
common-lisp
.
vector
stmx.util::*empty-vector*
:vector
common-lisp
.
fixnum
0
function
(function identity)
:key
This slot is read-only.
Generic binary tree node
Node for red-black trees
(or bit stmx:tvar)
stmx.util::+red+
Node of transactional sorted map, implemented with red-black tree
The class for direct slots of transactional classes.
Beyond the normal initargs for standard slots, the following
options can be passed to component slots:
:transactional [ T | NIL ] - Specify whether this slot is transactional.
- If true, all reads and writes will be transactional.
- If not specified, the default is to make a transactional slot.
The class for effective slots of transactional classes. Exactly analogous to TRANSACTIONAL-DIRECT-SLOT.
ATOMIC-T must be a type suitable for ATOMIC-COMPARE-AND-SWAP.
STMX assumes it can hold at least NIL and values of type BORDEAUX-THREADS:THREAD.
Jump to: | $
%
(
_
~
A B C D E F G H I K L M N O P R S T U V W |
---|
Jump to: | $
%
(
_
~
A B C D E F G H I K L M N O P R S T U V W |
---|
Jump to: | *
+
A B C F H I K L M N O P R S T V W |
---|
Jump to: | *
+
A B C F H I K L M N O P R S T V W |
---|
Jump to: | A B C F G H L M O P R S T U V X |
---|
Jump to: | A B C F G H L M O P R S T U V X |
---|