Если вы уже используете pthread, а функции блокировки pthread уже делают то, что вы хотите, лучше всего использовать функции блокировки pthread.
Эти атомарные встраивания являются строительными блоками для примитивов более высокого уровня; Написание этих высокоуровневых примитивов, как правило, сложно, и любые ошибки могут вызвать ошибки, которые могут занять много времени (так как они обычно зависят от времени). Если у вас уже есть библиотека с высокоуровневыми примитивами, которые делают то, что вы хотите, и достаточно быстры для ваших нужд (и не предполагаете, что они слишком медленные только из-за того, что вам нужно выполнить вызов функции), лучше не изобретать колесо.