This API is now multithread safe. However, it is not multitask safe. The reason is that the thread safety properties are achieved using mechanisms that belong to the Microwave class. These include static variables (initialized, owner) of the Microwave class. Thread synchronization and wait and notify operations use the monitor lock owned by the class. All of these mechanisms are visible to the threads of a single task, and thus they provide safety among the multiple threads of a single task.

However, in a multitasking environment, the class static variables and monitor lock are replicated in each task. Thus, if a thread in task A is performing an operation on the Microwave class, the initialized variable is true and the owner variable contains a reference to the thread performing the operation. However, in task B, the initialized variable still has the value false and the owner variable is null. If a thread in task B attempts an operation, it takes the lock (even though a thread in task A “owns” the lock in task A), it calls init() for the first time (from its point of view). This results in a second call to the native mw_init() function, which is an error. The thread in task B then calls some of the setup functions and then calls cook(), possibly before the cook operation initiated from task A completes, which is another error.

Multitask Safety

Use the microwave library and the Java programming language interface to illustrate how a library must be changed to be multitask safe.

The first and simplest case is class data (static variables) that is semantically global but is replicated into each task. Sometimes the singleton pattern is used in this fashion. Inspect each singleton Java class to determine whether it needs to be a singleton only from the point of view of Java threads that have access to it, or whether it needs to be a system-wide singleton. In the former case, ordinary singleton classes are sufficient. Even though they are replicated within each task, they can be per-task singletons because each Java thread sees only one instance of the singleton class. In the latter case, for global singletons, the singleton characteristic must apply to the entire system. The typical way to accomplish this is to migrate the relevant data from Java code into native code.

In our example, the global singleton data is a static boolean variable initialized that indicates whether the microwave library has been initialized. This can simply be migrated to an int variable in native code. Once this variable is in native code, it is visible to all tasks using native methods. You can write native methods to set and get this value and take action as appropriate. This technique is illustrated in CODE EXAMPLE 2-6.

Chapter 2 Multitasking Safety 13

Page 25
Image 25
Sun Microsystems 2 manual Multitask Safety

2 specifications

Sun Microsystems, founded in 1982, was a significant player in the computing industry, best known for its innovative technology solutions and workstations, particularly the Sun-4, which represented a key milestone in the company's history. The Sun-4 architecture, launched in 1987, utilized the SPARC (Scalable Processor Architecture) RISC processor, notable for its high performance and scalability.

One of the primary features of Sun Microsystems' platforms was their ability to efficiently handle multitasking and resource management, making them ideal for enterprise-level applications and development environments. Sun-4 workstations boasted impressive graphics capabilities with the addition of advanced graphical user interfaces, support for color displays, and the SUNVIEW windowing system, which enhanced user experience and productivity.

The Sun-4 systems also supported the SunOS operating system, which was based on UNIX. This operating system was engineered for stability and robustness, offering features like multiuser support, networked environments, and advanced security options. Moreover, SunOS provided seamless integration with various programming languages, including C and C++, facilitating software development that aligned with industry standards.

Another standout characteristic of Sun Microsystems was its commitment to open systems and standards. By providing developers with comprehensive tools and environments, such as the Standardized Application Programming Interface (API) and support for networking protocols, Sun facilitated interoperability among different computing platforms. The emphasis on open architecture also meant that customers could easily upgrade their systems without being locked into proprietary solutions.

Sun Microsystems was also ahead of its time with innovations in network computing. Their workstations were among the first to support network file systems and distributed computing concepts, enabling seamless data sharing across multiple systems. With the introduction of the Network File System (NFS), Sun revolutionized how data was accessed and managed across networks, which played a significant role in the evolving landscape of client-server computing.

In summary, the Sun Microsystems 2 and its successive innovations in workstation technology highlighted the company's forward-thinking approach. By integrating powerful performance with open systems, robust operating systems, and advanced networking capabilities, Sun laid the groundwork for modern computing, influencing various sectors from academia to enterprise solutions. Even after its acquisition by Oracle in 2010, the legacy of Sun Microsystems continues to be felt across the computing industry.