eCo Software Developer Connection

Development of SMP-safe applications and multi-thread applications are
different things.

Start from reading SMP.INF
The SMP Programming Addendum is a detailed
technical guide and reference for application programmers who which to
exploit the symmetric multiprocessor support in the OS/2 operating system.
It gives reference information and code examples to enable you to write
source code using OS/2 functions and tools.

FAQ

Q1: What is the difference between _beginthread and DosCreatThread?
A1: _beginthread initializes the C runtime, DosCreatThread doesn't.

When using the _beginthread and _endthread functions, you must
specify the /Gm+ compiler option to use the multithread libraries.

An alternative to this function is the OS/2 DosCreateThread API.
If you use DosCreateThread, you must also use a #pragma handler
statement for the thread function to ensure proper C exception
handling. You should also call the _fpreset function at the start
of the thread to preset the 387 control status word correctly.
Using DosCreateThread requires that you use _endthread to
terminate the thread.

Q2: How to create SMP-safe application?
A2: Don't write to one memory address from two threads simultaneously.
It's safe to do this on PC with one CPU, it's critical if you have many CPUs.
Use auxiliary lock functions to avoid the problems.

Q3: How to organize SMP-safe write to file?
A3: Instead of SpeenLock we recommend use other function:

volatile int InStatusLine = 0;
// Use __lxchg to implement fast-RAM semaphores to serialize access
// to a critical resource (so that only one thread can use it at a time).
while (__lxchg(&InStatusLine, 1))
{
DosSleep(1);
}
// write to file here
// restore the value
__lxchg(&InStatusLine, 0);