diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-03-22 14:06:07 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-03-22 14:06:07 -0700 |
| commit | 53d5c2766d90a53d3f6c0437bc59c1ad63ec701a (patch) | |
| tree | bc622efccbfaf9b05eca1c6c7ff8203011660651 /docs/man/nng_thread_create.3supp.adoc | |
| parent | 1dc090d39eded06eee7725bd507599d8f59a3379 (diff) | |
| download | nng-53d5c2766d90a53d3f6c0437bc59c1ad63ec701a.tar.gz nng-53d5c2766d90a53d3f6c0437bc59c1ad63ec701a.tar.bz2 nng-53d5c2766d90a53d3f6c0437bc59c1ad63ec701a.zip | |
Add documentation for supplemental functions.
This includes platform portability stuff like mutexes and threads,
etc. While here we fixed a problem with nng_opts_parse and we
addressed the type of the platform API.
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)>> |
