Threads Extension
In this chapter we will learn about using the Threads extension.
Supported platforms: Windows (32bit), Linux & macOS
If you are developing for Windows (64bit), Use threads from other extensions like GameLib (RingAllegro) or RingLibuv.
Creating Threads
Example (1):
load "threads.ring"
func main
t = new_thrd_t()
thrd_create(t,"Hello()")
res = 0
thrd_join(t, :res)
func Hello
? "Message from the Hello() function"
More Examples
Example (2):
load "threads.ring"
func main
t = new_thrd_t()
thrd_create(t,"Hello()")
res = 0
thrd_join(t, :res)
t2 = new_thrd_t()
thrd_create(t2,"Hello2()")
res2 = 0
thrd_join(t2, :res2)
? :done
func Hello
? "Message from the Hello() function"
func Hello2
? "Message from the Hello2() function"
Example (3):
load "threads.ring"
func main
nThreads = 2
aList = list(nThreads)
for x=1 to nThreads
aList[x] = new_thrd_t()
thrd_create(aList[x],"Hello("+x+")")
next
for x=1 to nThreads
res= 0
thrd_join(aList[x],:res)
next
? :Done
shutdown()
func Hello x
for r=1 to 100
? "Message from the Hello("+x+") function"
next
Example (4):
load "threads.ring"
func main
nThreads = 10
aList = list(nThreads)
for x=1 to nThreads
aList[x] = new_thrd_t()
thrd_create(aList[x],"Hello("+x+")")
next
for k=1 to nThreads
? "*** Before join: " + k + " *** "
res = 0
thrd_join(aList[K],:res)
? "*** After join: " + k + " *** "
next
? " ===== Done ========== "
func Hello x
for r=1 to 100
? "("+r+") Message from the Hello("+x+") function"
next
Reference
Constants:
TIME_UTC
TINYCTHREAD_VERSION_MAJOR
TINYCTHREAD_VERSION_MINOR
TINYCTHREAD_VERSION
thrd_error
thrd_success
thrd_timedout
thrd_busy
thrd_nomem
mtx_plain
mtx_timed
mtx_recursive
Functions:
int mtx_init(mtx_t *mtx, int type)
void mtx_destroy(mtx_t *mtx)
int mtx_lock(mtx_t *mtx)
int mtx_trylock(mtx_t *mtx)
int mtx_unlock(mtx_t *mtx)
int cnd_init(cnd_t *cond)
void cnd_destroy(cnd_t *cond)
int cnd_signal(cnd_t *cond)
int cnd_broadcast(cnd_t *cond)
int cnd_timedwait(cnd_t *cond, mtx_t *mtx, const struct timespec *ts)
thrd_t thrd_current(void)
int thrd_detach(thrd_t thr)
int thrd_equal(thrd_t thr0, thrd_t thr1)
void thrd_exit(int res)
int thrd_join(thrd_t thr, int *res)
int thrd_sleep(const struct timespec *duration, struct timespec *remaining)
void thrd_yield(void)
void tss_delete(tss_t key)
void *tss_get(tss_t key)
int tss_set(tss_t key, void *val)