The following should be considered before running an application in multi-processor mode:
In an OS/2 Warp Server for SMP environment, this technique will not work because it is possible that two or more threads could be executing the same INC instruction, receiving the same results in each processor's or thread's flag register and thinking that they have the semaphore.
For example, an application may have a time-critical and an idle thread, and may assume that while the time-critical thread is executing the idle thread will not get any execution time unless the time-critical thread explicitly yields the CPU. In an OS/2 Warp Server for SMP environment it is possible that both the time-critical and the idle threads are executing simultaneously on different processors.
The above compatibility requirements apply only to multi-threaded applications, and therefore do no apply to DOS and WINOS2 applications. However, you are strongly encouraged to write 32-bit multi-threaded applications for better performance and portability on OS/2 Warp Server for SMP.
Given the possibility that some set of applications may use one of these techniques, OS/2 Warp Server for SMP provides a mechanism that allows these multi-threaded applications to execute in UP mode. UP mode permits only one thread of that process to execute at a time. That thread could execute on any one of the available processors.
MARKEXE, described in View and Set Program Type For Executable File (MARKEXE), is used to mark an executable file as uniprocessor only. When an executable file that has the uniprocessor mode flag set is loaded, OS/2 ensures that only one thread of that process will ever execute at a time. Multiple uniprocessor only processes may be active in the system at the same time, but only one thread from each process may be active at a time.