D - Idea: Method wrappers
- Niall Douglas (31/31) Jan 12 2003 Since D is apparently multithreading friendly (and hence I hope I won't ...
- Walter (2/2) Feb 06 2003 Some good comments about mutexes, I've saved your post for reference.
Since D is apparently multithreading friendly (and hence I hope I won't get flamed to death for suggesting this), I once proposed a syntax for wrapping class methods in a pre and post call wrapper. To clarify, you can specify certain code to be called before every method and after every method, either globally for the class or per-method. There are tons of uses for this: hacking someone else's binaries, locking data access, profiling, patches etc. Building synchronisation support into the language is nice, but I see you've done it like Java which I find impossible to write high-performance multithreaded apps in simply because often it locks when you really don't need it to. Mutexes will always be an expensive operation given a processor SWAP instruction hangs the entire motherboard for its duration. A good example where you don't need to lock is reading processor-atomic values. Also, language supported synchronisation done Java style I find tends to lead to a lot of deadlocks and it's simply bad practice. One needs the ability to "unlock, wait, relock" which I didn't notice support for in D. Also, if you're supporting recursive mutexes (as you should), you can get into some interesting nesting deadlocks. I personally use a C++ based model of lock keys. You basically take out a key when you lock something for access, but the keys auto-unlock themselves intelligently when you are taking out another key. The trick here is to never use raw pointers across a lock state change as objects can move - atomic smart pointers here are your friend. With my system, I recently wrote a 30,000 line fully multithreaded industrial control program which was virtually bugless (six major bugs) and had excellent i/o latency, so I'm pretty sure I'm on the right track. I also noticed D doesn't appear to have read-write mutex support - if it did, all const methods could be called with read only lock which can vastly improve performance as it avoids kernel waits. Anyway, just my ha'pennies worth! Cheers, Niall
Jan 12 2003
Some good comments about mutexes, I've saved your post for reference. Thanks, -Walter
Feb 06 2003