Device Manage for OS/2

DevCon for OS/2 - Developer Connection

Operating systems:
ArcaOS, eComStation, IBM OS/2 Warp
Мифы о eComStation 

(Unsorted)  
 
 
Compilers  
 
 
Tools  
 
 
User Interface  
 
 
REXX  
 
 
Drivers/kernel  
 
 

 

 

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.

Useful articles

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);

Q4: Maximal quantity of threads?
A4: eComStation kernel can't create more than 4096 threads.

 


 

(C) OS2.GURU 2001-2024