Tag each object with its thread state ("owned" or "global")

Thread-local ownership of objects (memory allocation, reference counting, GC)

Decorators for flagging functions/classes/modules as thread-safe

Producer/consumer queues for transfering object ownership between threads

Compatibility mode for acquiring the GIL when necessary

Ability to see warnings and/or exceptions on accidental GIL acquiring

@threadsafe

__threadsafe__

__dict__

owner_thread_id

local_ref_count

global_ref_count

global_ref_count

local_ref_count

global_ref_count

owner_thread_id

ConcurrencyError

owner_thread_id

global_reference_count

local_reference_count

owner_thread_id

global_ref_count

global_ref_count

global_ref_count

OwnershipError

owner_thread_id

global_ref_count

local_ref_count

local_ref_count

OwnershipError

owner_thread_id