File: tthreadvars.nim

package info (click to toggle)
nim 2.2.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,911,644 kB
  • sloc: sh: 24,603; ansic: 1,761; python: 1,492; makefile: 1,013; sql: 298; asm: 141; xml: 13
file content (79 lines) | stat: -rw-r--r-- 1,503 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
discard """
disabled: i386
output: '''
10
1111
1222
3030303
3060606
6060606
6121212
3030903
3061206
3031503
3061806
5050505
5101010
'''
"""

import typetraits

var tls1 {.threadvar.}: int
var g0: int
var g1 {.global.}: int

proc customInc(x: var int, delta: int) =
  x += delta

customInc(tls1, 10)
echo tls1

proc nonGenericProc: int =
  var local: int
  var nonGenericTls {.threadvar.}: int
  var nonGenericGlobal {.global.}: int
  var nonGenericMixedPragmas {.global, threadvar.}: int

  customInc local, 1000
  customInc nonGenericTls, 1
  customInc nonGenericGlobal, 10
  customInc nonGenericMixedPragmas, 100

  return local + nonGenericTls + nonGenericGlobal + nonGenericMixedPragmas

proc genericProc(T: typedesc): int =
  var local: int
  var genericTls {.threadvar.}: int
  var genericGlobal {.global.}: int
  var genericMixedPragmas {.global, threadvar.}: int

  customInc local, T.name.len * 1000000
  customInc genericTls, T.name.len * 1
  customInc genericGlobal, T.name.len * 100
  customInc genericMixedPragmas, T.name.len * 10000

  return local + genericTls + genericGlobal + genericMixedPragmas

echo nonGenericProc()
echo nonGenericProc()

echo genericProc(int)
echo genericProc(int)

echo genericProc(string)
echo genericProc(string)

proc echoInThread[T]() {.thread.} =
  echo genericProc(T)
  echo genericProc(T)

proc newEchoThread(T: typedesc) =
  var t: Thread[void]
  createThread(t, echoInThread[T])
  joinThreads(t)

newEchoThread int
newEchoThread int
newEchoThread float