aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/man/libnng.3.adoc6
-rw-r--r--docs/man/nng_thread_create.3supp.adoc86
-rw-r--r--docs/man/nng_thread_destroy.3supp.adoc46
-rw-r--r--docs/man/nng_thread_set_name.3supp.adoc47
-rw-r--r--docs/ref/SUMMARY.md1
-rw-r--r--docs/ref/api/thr/index.md1
-rw-r--r--docs/ref/api/thr/nng_thread.md84
7 files changed, 89 insertions, 182 deletions
diff --git a/docs/man/libnng.3.adoc b/docs/man/libnng.3.adoc
index 5748546d..1ec270f2 100644
--- a/docs/man/libnng.3.adoc
+++ b/docs/man/libnng.3.adoc
@@ -298,9 +298,9 @@ as a convenience to aid in creating portable applications.
|xref:nng_opts_parse.3supp.adoc[nng_opts_parse()]|parse command line options
// |xref:nng_random.3supp.adoc[nng_random()]|get random number
// |xref:nng_socket_pair.3supp.adoc[nng_socket_pair()]|create connected pair of BSD sockets
-|xref:nng_thread_create.3supp.adoc[nng_thread_create()]|create thread
-|xref:nng_thread_destroy.3supp.adoc[nng_thread_destroy()]|reap thread
-|xref:nng_thread_set_name.3supp.adoc[nng_thread_set_name()]|set thread name
+// |xref:nng_thread_create.3supp.adoc[nng_thread_create()]|create thread
+// |xref:nng_thread_destroy.3supp.adoc[nng_thread_destroy()]|reap thread
+// |xref:nng_thread_set_name.3supp.adoc[nng_thread_set_name()]|set thread name
|===
=== Byte Streams
diff --git a/docs/man/nng_thread_create.3supp.adoc b/docs/man/nng_thread_create.3supp.adoc
deleted file mode 100644
index 10b02e22..00000000
--- a/docs/man/nng_thread_create.3supp.adoc
+++ /dev/null
@@ -1,86 +0,0 @@
-= nng_thread_create(3supp)
-//
-// Copyright 2024 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>
-
-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 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 wait synchronously for completion.
-
-When the thread is no longer needed, the
-xref:nng_thread_destroy.3supp.adoc[`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 system
-level 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 dozen of these.
-If greater concurrency or scalability is needed, consider instead using
-an asynchronous model using xref:nng_aio.5.adoc[`nng_aio`] structures.
-
-TIP: Threads can be synchronized using
-xref:nng_mtx_alloc.3supp.adoc[mutexes] and
-xref:nng_cv_alloc.3supp.adoc[condition variables].
-
-== RETURN VALUES
-
-This function returns 0 on success, and non-zero otherwise.
-
-== ERRORS
-
-[horizontal]
-`NNG_ENOMEM`:: Insufficient free memory exists.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_strerror.3.adoc[nng_strerror(3)],
-xref:nng_cv_alloc.3supp.adoc[nng_cv_alloc(3supp)],
-xref:nng_mtx_alloc.3supp.adoc[nng_mtx_alloc(3supp)],
-xref:nng_thread_destroy.3supp.adoc[nng_thread_destroy(3supp)],
-xref:nng_aio.5.adoc[nng_aio(5)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_thread_destroy.3supp.adoc b/docs/man/nng_thread_destroy.3supp.adoc
deleted file mode 100644
index 7caa1cd3..00000000
--- a/docs/man/nng_thread_destroy.3supp.adoc
+++ /dev/null
@@ -1,46 +0,0 @@
-= nng_thread_destroy(3supp)
-//
-// Copyright 2024 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_destroy - reap thread
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-void nng_thread_destroy(nng_thread *thread);
-----
-
-== DESCRIPTION
-
-The `nng_thread_destroy()` function reaps the _thread_.
-It waits for the thread function to return, and then deallocates
-the resources for the thread.
-
-IMPORTANT: Do not call this function from the thread function itself,
-or a deadlock will occur.
-
-== RETURN VALUES
-
-None.
-
-== ERRORS
-
-None.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_thread_create.3supp.adoc[nng_thread_create(3supp)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/man/nng_thread_set_name.3supp.adoc b/docs/man/nng_thread_set_name.3supp.adoc
deleted file mode 100644
index fb54fb02..00000000
--- a/docs/man/nng_thread_set_name.3supp.adoc
+++ /dev/null
@@ -1,47 +0,0 @@
-= nng_thread_set_name(3supp)
-//
-// Copyright 2024 Staysail Systems, Inc. <info@staysail.tech>
-//
-// 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_set_name - set thread name
-
-== SYNOPSIS
-
-[source, c]
-----
-#include <nng/nng.h>
-
-void nng_thread_set_name(nng_thread *thread, const char *name);
-----
-
-== DESCRIPTION
-
-The `nng_thread_set_name()` function attempts to set the name for the _thread_ to _name_.
-
-If _thread_ is `NULL`, then the name is set for the current thread.
-
-Support for this, and how names are exposed, varies between platform implementations.
-This function is intended to facilitate debugging applications that may have many threads.
-
-TIP: Internal threads created by _NNG_ will have names beginning with `nng:`.
-
-== RETURN VALUES
-
-None.
-
-== ERRORS
-
-None.
-
-== SEE ALSO
-
-[.text-left]
-xref:nng_thread_create.3supp.adoc[nng_thread_create(3supp)],
-xref:nng.7.adoc[nng(7)]
diff --git a/docs/ref/SUMMARY.md b/docs/ref/SUMMARY.md
index e39a9969..25076381 100644
--- a/docs/ref/SUMMARY.md
+++ b/docs/ref/SUMMARY.md
@@ -6,6 +6,7 @@
- [nng_cv](./api/thr/nng_cv.md)
- [nng_mtx](./api/thr/nng_mtx.md)
+ - [nng_thread](./api/thr/nng_thread.md)
- [Utility Functions](./api/util/index.md)
diff --git a/docs/ref/api/thr/index.md b/docs/ref/api/thr/index.md
index 5f60ed66..28d628d9 100644
--- a/docs/ref/api/thr/index.md
+++ b/docs/ref/api/thr/index.md
@@ -6,3 +6,4 @@ are likely to be useful in callback functions and similar situations.
- [nng_cv](nng_cv.md) --- condition variable
- [nng_mtx](nng_mtx.md) --- mutual exclusion lock
+- [nng_thread](nng_thread.md) -- thread of execution
diff --git a/docs/ref/api/thr/nng_thread.md b/docs/ref/api/thr/nng_thread.md
new file mode 100644
index 00000000..e13e77c6
--- /dev/null
+++ b/docs/ref/api/thr/nng_thread.md
@@ -0,0 +1,84 @@
+# nng_thread
+
+## NAME
+
+nng_thread --- thread of execution
+
+## SYNOPSIS
+
+```c
+#include <nng/nng.h>
+
+typedef struct nng_thread nng_thread;
+
+int nng_thread_create(nng_thread **thrp, void (*func)(void *), void *arg);
+void nng_thread_destroy(nng_thread *thr);
+void nng_thread_set_name(nng_thread *thr, const char *name);
+```
+
+### DESCRIPTION
+
+The {{i:`nng_thread`}} structure is used to represent a {{i:thread}} of execution.
+
+In NNG, a thread has an execution fuction _func_, and can be assumed to run this concurrently
+to other threads, including the main thread of the application. The thread persists
+until the function _func_ returns.
+
+> [!TIP]
+> The detail of whether the thread represents an operating system thread,
+> a process, or a "green" thread (also known as a a fiber or coroutine) is determined by the platform.
+> Portable applications should avoid depending on this implementation detail.
+
+The `nng_thread_create` function creates a thread,
+running _func_ with the argument _arg_.
+The thread is started immediately.
+A pointer to the thread object is returned in _thrp_.
+
+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 wait synchronously for completion.
+
+When the thread is no longer needed, the {{i: `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 system-level
+> 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 dozen of these.
+> If greater concurrency or scalability is needed, consider instead using
+> an asynchronous model using [`nng_aio`][aio] structures.
+
+> [!TIP]
+> Threads can be synchronized using [mutexes][mutex] and
+> [condition variables][condvar].
+
+In order to facilitate debugging, {{i:`nng_thread_set_name`}} may be called
+to provide a name for the thread. This may change how the thread is represented
+in debuggers. Not all platforms support setting the thread name.
+
+## RETURN VALUES
+
+The `nng_thread_create` function returns 0 on success, and non-zero otherwise.
+
+## ERRORS
+
+- `NNG_ENOMEM`: Insufficient free memory exists.
+
+## SEE ALSO
+
+[nng_cv][condvar],
+[nng_mutex][mutex]
+
+[condvar]: ../thr/nng_cv.md
+[mutex]: ../thr/nng_mtx.md
+[aio]: TODO.md