From: "Paul Derbyshire" Newsgroups: comp.os.msdos.djgpp Subject: Threading and asynchronous processes Lines: 48 Organization: The Chaos Zone MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Message-ID: <8R571.1176$qR3.4113921@news20.bellglobal.com> Date: Sat, 16 May 1998 01:20:04 GMT NNTP-Posting-Host: 206.172.182.156 NNTP-Posting-Date: Fri, 15 May 1998 21:20:04 EDT To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk It is fairly simple to create multithreaded DJGPP code using hooked timer interrupts and other fiddling. But two questions arise: 1. Can this form of threading launch a separate asynchronous process safely, e.g. a shell to command.com to display a directory as a simple example? If there are constraints, which of these will work? * Command.com and its builtin commands * Real-mode DOS apps * Other DJGPP apps * "start" or a Win32 app * Protected mode DOS apps using something other than DPMI e.g. DOS4GW (Somehow I doubt this one) If not, is it at least safe to suspend all the other threads to call it synchronously? 2. I have written a thread-safe operator new and delete wrapping malloc and using a mutex. However I have a question about safety of exception throwing. Do exceptions involve some sort of non-constant global objects? If so, would this require suspending all threads at any throw and resuming in a catch, to be safe, or could the threading scheduler be modified to make exception throwing safe? Just how does the thrown object propagate anyways, using a pointer in a register? What are the details of stack unwinding -- is it safe as long as each thread has its own stack, and the start of its call chain is wrapped in a try block so as not to allow any exceptions to pass? (For anyone wanting to issue remarks or concerns about the performance of code using malloc, please note I have written pool allocators to divert any requests for small allocations (32 bytes or less) to use pools of fixed size blocks allocated in big chunks, e.g. 262144 bytes.) -- .*. "Clouds are not spheres, mountains are not cones, coastlines are not -() < circles, and bark is not smooth, nor does lightning travel in a `*' straight line." ------------------------------------------------- -- B. Mandelbrot |http://www3.sympatico.ca/bob.beland/indexn2f.html _____________________ ____|________ Paul Derbyshire pderbysh AT usa DOT net Programmer & Humanist|ICQ: 10423848|