Advertisement
Guest User

Untitled

a guest
Jan 24th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.01 KB | None | 0 0
  1. import random, upcoming.asyncdispatch
  2.  
  3. randomize()
  4.  
  5. type
  6. ThreadArg = object
  7. ptrToFree: pointer
  8. e: AsyncEvent
  9.  
  10. proc allocThread(arg: ThreadArg) {.thread.} =
  11. deallocShared(arg.ptrToFree)
  12. var myPtrs = newSeq[pointer]()
  13. for i in 1..1000:
  14. myPtrs.add(alloc(random(1000)))
  15. for p in myPtrs:
  16. dealloc(p)
  17. arg.e.setEvent()
  18.  
  19. type MyThread = Thread[ThreadArg]
  20. var threads = newSeq[ptr MyThread](8)
  21. var events = newSeq[AsyncEvent](threads.len)
  22. for i in 1..100_000:
  23. echo i
  24. var eventsReceived = 0
  25. for i in 0..<threads.len:
  26. var p = allocShared(random(10000))
  27. var t = cast[ptr MyThread](alloc0(sizeof(MyThread)))
  28. threads[i] = t
  29. events[i] = newAsyncEvent()
  30. addEvent(events[i]) do (fd: AsyncFD) -> bool:
  31. inc eventsReceived
  32. createThread(t[], allocThread, ThreadArg(ptrToFree: p, e: events[i]))
  33. while eventsReceived != threads.len:
  34. poll()
  35. for t in threads.mitems():
  36. joinThread(t[])
  37. dealloc(t)
  38. t = nil
  39. for e in events.mitems():
  40. e.unregister()
  41. e.close()
  42. e = nil
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement