diff options
Diffstat (limited to 'docs/man/nng_thread_create.3supp.adoc')
| -rw-r--r-- | docs/man/nng_thread_create.3supp.adoc | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/docs/man/nng_thread_create.3supp.adoc b/docs/man/nng_thread_create.3supp.adoc new file mode 100644 index 00000000..359dabab --- /dev/null +++ b/docs/man/nng_thread_create.3supp.adoc @@ -0,0 +1,85 @@ += nng_thread_create(3supp) +// +// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech> +// Copyright 2018 Capitar IT Group BV <info@capitar.com> +// +// This document is supplied under the terms of the MIT License, a +// copy of which should be located in the distribution where this +// file was obtained (LICENSE.txt). A copy of the license may also be +// found online at https://opensource.org/licenses/MIT. +// + +== NAME + +nng_thread_create - create thread + +== SYNOPSIS + +[source, c] +---- +#include <nng/nng.h> +#include <nng/supplemental/util/platform.h> + +typedef struct nng_thread nng_thread; + +int nng_thread_create(nng_thread **thrp, void (*func)(void *), void *arg); +---- + +== DESCRIPTION + +The `nng_thread_create()` function creates a single thread of execution, +running _func_ with the argument _arg_. +The thread is started immediately. +A pointer to the thread object is returned in _thrp_. + +The intention of this program is to facilitate writing parallel programs. +Threads created by this program will be based upon the underlying +threading mechanism of the system that _NNG_ is running on. +This may include use of so-called "`green threads`" or coroutines. + +Using threads created by this function can make it easy to write +programs that use simple sequential execution, using functions in the +_NNG_ suite that would otherwise normally "`block`". + +When the thread is no longer needed, the +<<nng_thread_destroy.3supp#,`nng_thread_destroy()`>> +function should be used to reap it. +(This function will block waiting for _func_ to return.) + +IMPORTANT: Thread objects created by this function may not be "`real`" +threads capable of performing blocking I/O operations using normal blocking +system calls. +If use of blocking system calls is required (not including APIs provided +by the _NNG_ library itself of course), then real OS-specific threads +should be created instead (such as with `pthread_create()` or similar +functions.) + +IMPORTANT: Thread objects created by this function cannot be passed +to any system threading functions. + +TIP: The system may impose limits on the number of threads that can be +created. +Typically applications should not create more than a few dozen of these. +If greater concurrency or scalability is needed, consider instead using +an asynchronous model using <<nng_aio.5#,`nng_aio`>> structures. + +TIP: Threads can be synchronized using +<<nng_mtx_alloc.3supp#,mutexes>> and +<<nng_cv_alloc.3supp#,condition variables>>. + +== RETURN VALUES + +This function returns 0 on success, and non-zero otherwise. + +== ERRORS + +`NNG_ENOMEM`:: Insufficient free memory exists. + +== SEE ALSO + +<<nng_strerror.3#,nng_strerror(3)>>, +<<nng_cv_alloc.3supp#,nng_cv_alloc(3supp)>>, +<<nng_mtx_alloc.3supp#,nng_mtx_alloc(3supp)>>, +<<nng_thread_destroy.3supp#,nng_thread_destroy(3supp)>>, +<<nng_aio.5#,nng_aio(5)>>, +<<nng.7#,nng(7)>> |
