Documentation: please explain what the section_id should be and how one should use this.  Presumably the same name must be used for both wait and the matching release.  Can each client make up whatever names it likes ?  Is it problematic to have two critical sections active in over-lapping time-periods ?  Do they have to nest, or can client code wait(a), wait(b), release(a), release(b) ?  Presumably if one client has waited for a and not yet released it, another client waiting for the same a shall wait until that release happens.  All of this should be documented.