Re: [PATCH] Add thread local storage to libthread documentation.
[Thread Prev] | [Thread Next]
[Date Prev] | [Date Next]
- Subject: Re: [PATCH] Add thread local storage to libthread documentation.
- From: Ori Bernstein <ori@xxxxxxxxxxxxxx>
- Reply-to: myrddin-dev@xxxxxxxxxxxxxx
- Date: Fri, 7 Dec 2018 00:55:08 -0800
- To: myrddin-dev@xxxxxxxxxxxxxx
- Cc: iriri <iri@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
Merged. Thanks!
On Thu, 06 Dec 2018 22:52:16 -0800, iriri <iri@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> ---
> doc/libthread/index.txt | 75 +++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 75 insertions(+)
>
> diff --git a/doc/libthread/index.txt b/doc/libthread/index.txt
> index f9f4593..1bfc0f5 100644
> --- a/doc/libthread/index.txt
> +++ b/doc/libthread/index.txt
> @@ -39,6 +39,8 @@ Summary
> ...
> ;;
>
> + type tlskey(@a#)
> +
> impl atomic int32
> impl atomic int64
> impl atomic uint32
> @@ -85,8 +87,14 @@ Summary
> generic xcasptr : (p : @a##, old : std.option(@a#), new : std.option(@a#) -> std.option(@a#))
> generic xchgptr : (p : @a##, new : std.option(@a#) -> std.option(@a#))
>
> + /* thread local storage */
> + generic tlsalloc : (-> tlskey(@a#))
> + generic tlsset : (k : tlskey(@a#), v : @a# -> void)
> + generic tlsget : (k : tlskey(@a#) -> @a#)
> +
> /* misc */
> const ncpu : (-> int)
> + const tid : (-> tid)
> ;;
>
> Types
> @@ -280,6 +288,68 @@ These are identical to the corresponding atomic implementations for integral
> types except `std.Some v` is used to represent a nonzero pointer and `std.None`
> is used to represent the zero pointer.
>
> +Thread Local Storage
> +--------------------
> +
> +Thread local storage can be used in cases where different threads each need
> +their own copy of the same global variable. These variables must be pointers
> +and are accessed via shared keys. The thread local variables of a newly spawned
> +thread are uninitialized.
> +
> + generic tlsalloc : (-> tlskey(@a#))
> +
> +Allocates a new thread local variable and returns its key.
> +
> +This function must be called from the main thread. The thread local variables
> +available to a child thread C are the thread local variables available to its
> +parent P at the time when P spawned C.
> +
> + generic tlsset : (k : tlskey(@a#), v : @a# -> void)
> +
> +Sets the thread local variable associated with the given key.
> +
> + generic tlsget : (k : tlskey(@a#) -> @a#)
> +
> +Gets the thread local variable associated with the given key.
> +
> +In the following example, a thread local variable is allocated and each thread
> +stores a tuple of its id and the current time. A wait group is then used to
> +serialize the printing of these values, demonstrating that each thread has a
> +unique copy of the variable.
> +
> +```{runmyr threadlocal}
> +use std
> +use thread
> +
> +var key
> +var wg
> +
> +const set = {
> + var t = std.mk((thread.tid(), std.now()))
> + thread.tlsset(key, t)
> +}
> +
> +const greet = {
> + var t = thread.tlsget(key)
> + std.put("hello from thread {w=5} at time {}\n", t#.0, t#.1 % 1000000)
> + std.free(t)
> +}
> +
> +const main = {
> + key = thread.tlsalloc()
> + wg = thread.mkwg(1)
> +
> + set()
> + thread.spawn({
> + set()
> + greet()
> + thread.wgpost(&wg)
> + })
> + thread.wgwait(&wg)
> + greet()
> +}
> +```
> +
> Misc
> ----
>
> @@ -287,3 +357,8 @@ Misc
>
> Returns the number of CPUs available to run your code. On systems where this
> information is unavailable, `1` is returned as a safe default.
> +
> + const tid : (-> tid)
> +
> +Returns the thread id of the current thread. The main thread is guaranteed to
> +have thread id 0.
> --
> 2.19.2
>
>
--
Ori Bernstein
| [PATCH] Add thread local storage to libthread documentation. | iriri <iri@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> |
| Re: [PATCH] Add thread local storage to libthread documentation. | Ori Bernstein <ori@xxxxxxxxxxxxxx> |
| [PATCH] Add thread local storage to libthread documentation. | iriri <iri@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> |
- Prev by Date: [PATCH] Add thread local storage to libthread documentation.
- Previous by thread: [PATCH] Add thread local storage to libthread documentation.
- Index(es):