From: Nick A. <nal...@gm...> - 2007-09-06 08:15:08
|
the following chunk of code http://paste.lisp.org/display/47260 defines the parameters TEST-COUNTER and TEST-SAFE-COUNTER, which are both set to 0. It also defines a function TEST-VALUE. TEST-VALUE creates two threads which both (unsafely) increment TEST-COUNTER at the same time then creates two threads which (safely) increment TEST-SAFE-COUNTER using SB-EXT:COMPARE-AND-SWAP. CL-USER> (test-value 100000000) ... wait until the threads finish incrementing CL-USER> test-counter 124418647 CL-USER> test-safe-counter 200000000 After running TEST-VALUE, TEST-COUNTER is clearly in an incorrect state, while TEST-SAFE-COUNTER has clearly been incremented the proper amount of times. this other chunk of code http://paste.lisp.org/display/47261 does almost the exact same thing, except setting the respective cars of TEST-CONS and TEST-SAFE-CONS with a function TEST-CAR, instead of symbol-values CL-USER> (test-car 100000000) ... wait until the threads finish incrementing CL-USER> test-cons (141033059 . DUMMY) CL-USER> test-safe-cons (192868319 . SAFE-DUMMY) ;; why? I'm a bit confused here. what is wrong with the second chunk of code and how should I be calling SB-EXT:COMPARE-AND-SWAP to safely perform this type of operation in a multithreaded environment thanks for your time Nick |
From: Nikodemus S. <nik...@ra...> - 2007-09-06 10:54:58
|
On 9/6/07, Nick Allen <nal...@gm...> wrote: What you have uncovered is a horrible build bug. The CAS build expects :COMPARE-AND-SWAP-VOPS in *FEATURES*, but make-config.sh pushes :COMPARE-AND-SWAP-VOP there... Rebuild SBCL with (lambda (f) (list* :compare-and-swap-vops :sb-thread f)) in customize-target-features.lisp, and all should be well. It turns out I had one just like this left over from time I was working on the CAS code, so all my builds were fine... But obviously our tests are defective since they didn't catch this elsewhere. I'll see to it. Many thanks for reporting this! Cheers, -- Nikodemus |
From: Nick A. <nal...@gm...> - 2007-09-06 11:16:17
|
On 9/6/07, Nikodemus Siivola <nik...@ra...> wrote: > > On 9/6/07, Nick Allen <nal...@gm...> wrote: > > What you have uncovered is a horrible build bug. The CAS build > expects :COMPARE-AND-SWAP-VOPS in *FEATURES*, but make-config.sh > pushes :COMPARE-AND-SWAP-VOP there... > > Rebuild SBCL with > > (lambda (f) > (list* :compare-and-swap-vops :sb-thread f)) > > in customize-target-features.lisp, and all should be well. > > It turns out I had one just like this left over from time I was > working on the CAS > code, so all my builds were fine... But obviously our tests are > defective since they > didn't catch this elsewhere. I'll see to it. > > Many thanks for reporting this! > well, thanks should really go to Gabriele Favalessa for first noticing this and writing the test code. we'll rebuild SBCL and give it another try thanks for the help, good luck with the fix Nick |
From: Nikodemus S. <nik...@ra...> - 2007-09-06 13:39:17
|
Fixed in 1.0.9.38. Cheers, -- Nikodemus |