Subj : DOS mutex To : ALL From : Jcurtis Date : Wed Jun 04 2025 10:58:42 I have a shared list. User code adds to it, interrupt code drains it. The user update sequence must be atomic, so the list can't be corrupted by interrupt code. Typical method is a cli/sti critical section around the user update sequence. But I avoid disabling interrupts when possible, and x86 xchg does the trick. Indirect addresssing using [bx] was the only way I could make it work. If anyone has a better trick, please advise. --- code works with Borland C++ 3.1 --- int data [] = {3,14,29,33,0,0,0,0,0}; /* list count in element [0] */ int *w = data; /* do not disturb when [0] == 0 */ void main () { _DX = 0; /* list count == 0 means mutex */ asm mov bx, w; /* get list count and set mutex */ asm xchg dx, [bx]; /* with CPU interrupts inhibited */ w[++_DX] = 55; /* add a new element to the list */ asm mov bx, w; /* bx got trashed, load it again */ asm xchg dx, [bx]; /* updates count and clears mutex */ _AX = 0; /* stopping place for debugger */ } * SLMR 2.1a * --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .