Wednesday, December 30, 2009

A gift to all multithreaded Delphi programmers

A (very) prerelease version 1.05, available via SVN or as a ZIP archive.

I’ve managed to produce two interesting data structures:

  • TOmniQueue (existing class TOmniQueue was renamed to TOmniBoundedQueue) is a dynamically allocated, O(1) enqueue and dequeue, threadsafe,  microlocking queue. The emphasys is on dynamically allocated. In other words – it grows and shrinks!
  • TOmniBlockingCollection is a partial clone (with some enhancements) of .NET’s BlockingCollection.

Have fun and happy new year to all Delphi programmers!


  1. Interesting.
    I have read your article about Threads in Blaizepascal.
    Interesting and looking forward to read the next installment.

  2. Anonymous16:16

    The blocking collection looks incredibly useful, but how can I use it in the context of thread shutdown? Imagine a few consumers blocking on the collection inside Take(), and then the consumer threads are to be shut down. How could this be achieved?

  3. Anonymous16:26

    OK, after reading the source code I think CompleteAdding() is doing the trick. Neat. Thanks for that present.

  4. Yes, CompleteAdding and wait for consumers to shut down.