Working with threads

Thread API

mono_thread_attach
Syntax
MonoThread* mono_thread_attach (MonoDomain *domain)

mono_thread_create
Syntax
void mono_thread_create (MonoDomain *domain, gpointer func, gpointer arg)

mono_thread_current
Syntax
MonoThread* mono_thread_current (void)

mono_thread_detach
Syntax
void mono_thread_detach (MonoThread *thread)

mono_thread_exit
Syntax
void mono_thread_exit (void)

mono_thread_get_managed_id
Syntax
int32_t mono_thread_get_managed_id (MonoThread *thread)

Return value
the Thread.ManagedThreadId value of thread. Returns -1 if thread is NULL.
mono_thread_get_name_utf8
Syntax
char* mono_thread_get_name_utf8 (MonoThread *thread)

Return value
the name of the thread in UTF-8. Return NULL if the thread has no name. The returned memory is owned by the caller (g_free it).
mono_thread_is_foreign
Syntax
mono_bool mono_thread_is_foreign (MonoThread *thread)

Parameters
thread the thread to query
Return value
TRUE if thread was not created by the runtime.
Description

This function allows one to determine if a thread was created by the mono runtime and has a well defined lifecycle or it's a foreign one, created by the native environment.

mono_thread_manage
Syntax
void mono_thread_manage (void)

Description

mono_thread_new_init
Syntax
void mono_thread_new_init (intptr_t tid, gpointer stack_start, gpointer func)

mono_threads_get_default_stacksize
Syntax
guint32 mono_threads_get_default_stacksize (void)

mono_threads_set_default_stacksize
Syntax
void mono_threads_set_default_stacksize (guint32 stacksize)

mono_thread_set_manage_callback
Syntax
void mono_thread_set_manage_callback (MonoThread *thread, MonoThreadManageCallback func)

mono_thread_stop
Syntax
void mono_thread_stop (MonoThread *thread)

mono_thread_get_main
Syntax
MonoThread* mono_thread_get_main (void)

mono_thread_set_main
Syntax
void mono_thread_set_main (MonoThread *thread)

Parameters
thread thread to set as the main thread
Description
This function can be used to instruct the runtime to treat thread as the main thread, ie, the thread that would normally execute the Main method. This basically means that at the end of thread, the runtime will wait for the existing foreground threads to quit and other such details.

Monitors

mono_monitor_enter
Syntax
gboolean mono_monitor_enter (MonoObject *obj)

mono_monitor_enter_v4
Syntax
void mono_monitor_enter_v4 (MonoObject *obj, char *lock_taken)

mono_monitor_exit
Syntax
void mono_monitor_exit (MonoObject *obj)

mono_monitor_try_enter
Syntax
gboolean mono_monitor_try_enter (MonoObject *obj, guint32 ms)

Initialization and Shutdown

mono_thread_cleanup
Syntax
void mono_thread_cleanup (void)

mono_thread_detach_if_exiting
Syntax
mono_bool mono_thread_detach_if_exiting (void)

Description

Detach the current thread from the runtime if it is exiting, i.e. it is running pthread dtors. This should be used at the end of embedding code which calls into managed code, and which can be called from pthread dtors, like dealloc: implementations in Objective-C.