
"Peter Dimov" <pdimov@mmltd.net> writes:
Anthony Williams wrote:
"Peter Dimov" <pdimov@mmltd.net> writes:
There is a note in N2178 that shows how to implement call_once on top of pthread_once2_np. ;-)
I know that it's possible, just "much harder": ...
You haven't even looked at it, have you. :-/
Sorry, I misread what you wrote above, and looked at the /implementation/ of pthread_once2_np. I agree that it's not that hard to write call_once in terms of pthread_once2_np, but that isn't what POSIX provides.
Since on Windows the code for call_once is pretty much the same whether or not init_routine takes arguments, it seems pointless to go round the houses setting thread-specific data just for the benefit of writing call_once in terms of pthread_once rather than vice versa.
That is why there is pthread_once2_np in N2178. The actual call_once code is pretty much the same on POSIX as well, and it is equally pointless to use TLS there. So I tried to fix both.
OK. But that doesn't really address my initial point: implementing call_once in terms of the POSIX pthread_once is a bit pointless if you need to implement pthread_once separately anyway. If you don't have pthread_once, I would write call_once (or, equivalently pthread_once2_np), and implement pthread_once in terms of that. Anthony -- Anthony Williams Just Software Solutions Ltd - http://www.justsoftwaresolutions.co.uk Registered in England, Company Number 5478976. Registered Office: 15 Carrallack Mews, St Just, Cornwall, TR19 7UL