Dormant Connections in a Thread-Safe Environment
In a thread-safe Informix® ESQL/C application, the DORMANT option makes an active connection dormant. Another thread can now use the connection by issuing the SET CONNECTION statement without the DORMANT option. A thread-safe environment can have many threads (concurrent pieces of work performing particular tasks) in one Informix® ESQL/C application, and each thread can have one active connection.
An active connection is associated with a particular thread. Two
threads cannot share the same active connection. Once a thread makes
an active connection dormant, that connection is available to other
threads. A dormant connection is still established but is not currently
associated with any thread. For example, if the connection named con1
is
active in the thread named thread_1
, the thread named thread_2
cannot
make connection con1
its active connection until thread_1
has
made connection con1
dormant.
thread_2()
{ /* Make con2 an active connection */
EXEC SQL connect to 'db2' as 'con2';
/*Do insert on table t2 in db2*/
EXEC SQL insert into table t2 values(10);
/* make con2 available to other threads */
EXEC SQL set connection 'con2' dormant;
}
If a connection to a database environment was initiated using the CONNECT . . . WITH CONCURRENT TRANSACTION statement, any thread that subsequently connects to that database environment can use an ongoing transaction. In addition, if an open cursor is associated with such a connection, the cursor remains open when the connection is made dormant.
Threads within a thread-safe Informix® ESQL/C application can use the same cursor by making the associated connection current, even though only one thread can use the connection at any given time.