scheme_mutex_t now uses volatile keyword for owner and count fields
because these fields can be accessed from multiple threads concurrently. Updated $yield and $thread-check in mats/thread.ms to be more tolerant of timing variability. original commit: 0a6a1e14e7ecb9e39fa7a10a8584ed2fec24cbf4
This commit is contained in:
parent
d14d167275
commit
51db0ddbc1
5
LOG
5
LOG
|
@ -248,3 +248,8 @@
|
||||||
io.ms
|
io.ms
|
||||||
- fixed typo: VC/bin/vcvars64.bat => VC/bin/amd64/vcvars64.bat
|
- fixed typo: VC/bin/vcvars64.bat => VC/bin/amd64/vcvars64.bat
|
||||||
c/Mf-a6nt, c/Mf-ta6nt
|
c/Mf-a6nt, c/Mf-ta6nt
|
||||||
|
- scheme_mutex_t now uses volatile keyword for owner and count fields
|
||||||
|
because these fields can be accessed from multiple threads
|
||||||
|
concurrently. Updated $yield and $thread-check in mats/thread.ms to
|
||||||
|
be more tolerant of timing variability.
|
||||||
|
c/types.h, mats/thread.ms, release_notes.stex
|
||||||
|
|
|
@ -277,8 +277,8 @@ typedef struct _bucket_pointer_list {
|
||||||
|
|
||||||
#ifdef PTHREADS
|
#ifdef PTHREADS
|
||||||
typedef struct {
|
typedef struct {
|
||||||
s_thread_t owner;
|
volatile s_thread_t owner;
|
||||||
uptr count;
|
volatile uptr count;
|
||||||
s_thread_mutex_t pmutex;
|
s_thread_mutex_t pmutex;
|
||||||
} scheme_mutex_t;
|
} scheme_mutex_t;
|
||||||
|
|
||||||
|
|
|
@ -94,11 +94,11 @@
|
||||||
(define $fib (lambda (x) (if (< x 2) 1 (+ ($fib (- x 1)) ($fib (- x 2))))))
|
(define $fib (lambda (x) (if (< x 2) 1 (+ ($fib (- x 1)) ($fib (- x 2))))))
|
||||||
(define $nthreads 1)
|
(define $nthreads 1)
|
||||||
(define $yield
|
(define $yield
|
||||||
(let ([t (make-time 'time-duration 1000 0)])
|
(let ([t (make-time 'time-duration 1000000 0)])
|
||||||
(lambda () (sleep t))))
|
(lambda () (sleep t))))
|
||||||
(define $thread-check
|
(define $thread-check
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(let loop ([n 10] [nt (length ($threads))])
|
(let loop ([n 100] [nt (length ($threads))])
|
||||||
(cond
|
(cond
|
||||||
[(<= nt $nthreads)
|
[(<= nt $nthreads)
|
||||||
(set! $nthreads nt)
|
(set! $nthreads nt)
|
||||||
|
|
|
@ -1474,6 +1474,12 @@ On Windows, the inliner has been fixed to handle \scheme{wchar} and
|
||||||
|
|
||||||
On Windows, the path-related procedures now raise an appropriate exception when the path argument is not a string.
|
On Windows, the path-related procedures now raise an appropriate exception when the path argument is not a string.
|
||||||
|
|
||||||
|
\subsection{Internal mutex structure not always thread safe (9.4)}
|
||||||
|
|
||||||
|
The internal mutex structure now has its fields marked
|
||||||
|
\scheme{volatile} so that the C compiler does not reorder assignments
|
||||||
|
to these fields.
|
||||||
|
|
||||||
\subsection{\protect\scheme{dynamic-wind} mistakenly enabling interrupts (9.3.3)}
|
\subsection{\protect\scheme{dynamic-wind} mistakenly enabling interrupts (9.3.3)}
|
||||||
|
|
||||||
A bug causing \scheme{dynamic-wind} to unconditionally enable
|
A bug causing \scheme{dynamic-wind} to unconditionally enable
|
||||||
|
|
Loading…
Reference in New Issue
Block a user