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!

4 comments:

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

    ReplyDelete
  2. 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?

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

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

    ReplyDelete