The icetCreateContext function creates a new .igcontext!IceT IceT context, makes it current, and returns a handle to the new context. The handle returned is of type IceTContext. This is an opaque type that should not be handled directly, but rather simply passed to other IceT functions.
Like OpenGL ,the IceT engine behaves like a large state machine. The parameters for engine operation is held in the current state. The entire state is encapsulated in a context. Each new context contains its own state.
It is therefore possible to change the entire current state of IceT by simply switching contexts. Switching contexts is much faster, and often more convenient, than trying to change many state parameters.
It may be tempting to use contexts to run different IceT operations on separate program threads. Although certainly possible, great care must be taken. First of all, all threads will share the same context. Second of all, IceT is not thread safe. Therefore, a multi-threaded program would have to run all IceT commands in `critical sections' to ensure that the correct context is being used, and the methods execute safely in general.
icetCreateContext duplicates the communicator comm. Thus, to avoid deadlocks on certain implementations (such as MPI), the user level program should call icetCreateContext on all processes with the same comm object at about the same time.
Copyright (C)2003 Sandia Corporation
Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains certain rights in this software.
This source code is released under the New BSD License.