std::lock_guard
является примером общей концепции C ++, известной как RAII. Программисты C ++ нуждаются в этом, потому что функция C ++ может быть закрыта способами, которые программист не написал сам, через исключение.
C не имеет исключений, поэтому такая концепция, как RAII, несмотря на ее достоинства и полезность, на самом деле не нужна. Чтобы выполнить такое парное действие в C, вам нужно вызвать обе функции самостоятельно. Как именно вы это делаете, полностью зависит от вас. Например, вы можете отложить блокировку до функции-оболочки, которая принимает обратный вызов:
static inline void do_locked( void (*cb)(void) ) {
mtx_lock(&m);
cb();
mtx_unlock(&m);
}
static inline void do2_impl(void) {
x = x / 3;
}
static void do2() {
do_locked(do2_impl);
}
Дисциплина для поддержания хорошей структурированности вашего кода - это все, что нужно на самом деле, даже если у вас нет того же набора инструментов, который дает вам C ++.