[Python-ideas] New PyThread_tss_ C-API for CPython
Nick Coghlan
ncoghlan at gmail.com
Wed Dec 21 11:07:07 EST 2016
More information about the Python-ideas mailing list
Wed Dec 21 11:07:07 EST 2016
- Previous message (by thread): [Python-ideas] New PyThread_tss_ C-API for CPython
- Next message (by thread): [Python-ideas] New PyThread_tss_ C-API for CPython
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 21 December 2016 at 20:01, Erik Bray <erik.m.bray at gmail.com> wrote: > On Wed, Dec 21, 2016 at 2:10 AM, Nick Coghlan <ncoghlan at gmail.com> wrote: > > Option 2: Similar to option 1, but using a custom type alias, rather than > > using a C99 bool directly > > > > The closest API we have to these semantics at the moment would be > > PyGILState_Ensure, so the following API naming might work for option 2: > > > > Py_ensure_t > > Py_ENSURE_NEEDS_INIT > > Py_ENSURE_INITIALIZED > > > > Respectively, these would just be aliases for bool, false, and true. > > > > And then modify the proposed PyThread_tss_create and PyThread_tss_delete > > APIs to accept a "Py_ensure_t *init_flag" in addition to their current > > arguments. > > That all sounds good--between the two option 2 looks a bit more explicit. > > Though what about this? Rather than adding another type, the original > proposal could be changed slightly so that Py_tss_t *is* partially > defined as a struct consisting of a bool, with whatever the native TLS > key is. E.g. > > typedef struct { > bool init_flag; > #if defined(_POSIX_THREADS) > pthreat_key_t key; > #elif defined (NT_THREADS) > DWORD key; > /* etc... */ > } Py_tss_t; > > Then it's just taking Masayuki's original patch, with the global bool > variables, and formalizing that by combining the initialized flag with > the key, and requiring the semantics you described above for > PyThread_tss_create/delete. > > For Python's purposes it seems like this might be good enough, with > the more general purpose pthread_once-like functionality not required. > Aye, I also thought of that approach, but talked myself out of it since there's no definable default value for pthread_key_t. However, C99 partial initialisation may deal with that for us (by zeroing the memory without actually assigning a typed value to it), and if it does, I agree it would be better to handle the initialisation flag automatically rather than requiring callers to do it. Cheers, Nick. -- Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://mail.python.org/pipermail/python-ideas/attachments/20161222/b8b03b0c/attachment.html>
- Previous message (by thread): [Python-ideas] New PyThread_tss_ C-API for CPython
- Next message (by thread): [Python-ideas] New PyThread_tss_ C-API for CPython
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list