Re: Null pointer exception problem
Chris Uppal wrote:
Patricia Shanahan wrote:
Every library function in Sun's C library documentation is tagged with
an "MT-level" attribute indicating its multithread behavior.
To see an example, go to docs.sun.com and search for e.g. malloc.
Out of curiosity, what are the "levels" of thread-safety in that convention ?
Sun's server was taking several minutes to follow each link when I looked for
the malloc() documentation, so I didn't try to find a direct statement in the
their documents.
Unfortunately, I have not found a way of forming a URL for a deep point
in the documentation. Here are the levels, with my summary of the
meanings. Quoted material is copied from the web page.
Safe - functionally OK, but may be poor performance, such as a library
that treats all its code as a single critical region.
Unsafe - "An Unsafe library contains global and static data that is not
protected."
MT-Safe - "An MT-Safe library is fully prepared for multithreaded
access. It protects its global and static data with locks, and can
provide a reasonable amount of concurrency."
Async-Signal-Safe - Safe to call from signal handlers.
MT-Safe with Exceptions - See notes
Safe with Exceptions - See notes
Fork1-Safe - does proper lock clean-up for forking.
Cancel-Safety - safe to use with pthread cancel.
I don't claim these are the right classifications for Java. I don't
think, for example, that it would be a good idea to invoke Java code
inside a signal handler.
How about these:
Unsafe: All accesses should be synchronized externally. May modify
static data without synchronization.
Object-unsafe: Any static data access is synchronized, but caller is
responsible for ensuring instance methods only run in one thread at a
time. Can be done either by calling instance methods for a given object
in only one thread, or by synchronizing all instance method calls for a
given object on that object.
Safe: Only needs external synchronization to achieve consistency between
multiple calls.
Event-thread-only: Use in event handling thread only. (Most of Swing
would be designated Event-thread-only).
Patricia