Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random, upcoming.asyncdispatch
- randomize()
- type
- ThreadArg = object
- ptrToFree: pointer
- e: AsyncEvent
- proc allocThread(arg: ThreadArg) {.thread.} =
- deallocShared(arg.ptrToFree)
- var myPtrs = newSeq[pointer]()
- for i in 1..1000:
- myPtrs.add(alloc(random(1000)))
- for p in myPtrs:
- dealloc(p)
- arg.e.setEvent()
- type MyThread = Thread[ThreadArg]
- var threads = newSeq[ptr MyThread](8)
- var events = newSeq[AsyncEvent](threads.len)
- for i in 1..100_000:
- echo i
- var eventsReceived = 0
- for i in 0..<threads.len:
- var p = allocShared(random(10000))
- var t = cast[ptr MyThread](alloc0(sizeof(MyThread)))
- threads[i] = t
- events[i] = newAsyncEvent()
- addEvent(events[i]) do (fd: AsyncFD) -> bool:
- inc eventsReceived
- createThread(t[], allocThread, ThreadArg(ptrToFree: p, e: events[i]))
- while eventsReceived != threads.len:
- poll()
- for t in threads.mitems():
- joinThread(t[])
- dealloc(t)
- t = nil
- for e in events.mitems():
- e.unregister()
- e.close()
- e = nil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement